0

この問題をjsavascriptの閉鎖で解決する最良の方法は何ですか?

ここに私は簡単な問題があります:

10スパンとonclickイベント(クリックごとにブロックのアラート数が予想されます):

var spans = document.getElementsByTagName('span');

function addEvents(divs) {
    for(var i=0; i < divs.length; i++) {
        divs[i].innerHTML = i;
        divs[i].onclick = function() { alert(i) }
    }
}

addEvents(spans);

JSFiddle リンク

4

1 に答える 1

1

自己実行クロージャーでラップします。

divs[i].onclick = (function(i) {
    return function() {
        alert(i);
    };
})(i);

短くするには: コールバックとして定義します:

var callback = function(i) {
    return function() { alert(i); };
};

divs[i].onclick = callback(i);
于 2013-03-28T15:24:01.103 に答える