クリックイベントで foreach ループの現在の反復を渡したいのですが、「未定義」が返されますが、なぜですか?
for (var i = 0; i < __ARR_selectors.length; i++) {
__ARR_selectors[i].click( function(e, i) {
console.log(i); //returns undefined
}
クリックイベントで foreach ループの現在の反復を渡したいのですが、「未定義」が返されますが、なぜですか?
for (var i = 0; i < __ARR_selectors.length; i++) {
__ARR_selectors[i].click( function(e, i) {
console.log(i); //returns undefined
}
これを試して:
for (var i = 0; i < __ARR_selectors.length; i++) {
(function (i) {
__ARR_selectors[i].click( function() {
console.log(i); //returns undefined
});
})(i);
}
コードの問題はi
、ループの反復ごとに変数が更新されるため、クリックイベントが最後の値にバインドされることi
です。
i
この問題を回避するには、 javascript クロージャーを回避するパラメーターを受け入れる匿名関数を作成します。