わかりました、これが問題のスクリプトです。
var links = [ 'one', 'two', 'three' ];
for( var i = 0; i < links.length; i++ ) {
var a = document.createElement( 'div' );
a.innerHTML = links[i];
a.onclick = function() { alert( i ) }
document.body.appendChild( a );
}
このスクリプトは、配列を使用して、1、2、3 の 3 つの div を生成します。
配列内の位置のインデックスを警告する各 div に (簡単にするために Dom0) クリック ハンドラーを設定しました。-そうではないことを除いて!配列の最後のインデックスである 3 を常に警告します。
これは、'alert( i )' の 'i' が外部スコープ (この場合はグローバル) へのライブ参照であり、ループの最後でその値が 3 であるためです。必要なのは、ループ内で i を逆参照する方法です。
これは1つの解決策であり、私はそれを使用する傾向があります.
var links = [ 'one', 'two', 'three' ];
for( var i = 0; i < links.length; i++ ) {
var a = document.createElement( 'div' );
a.innerHTML = links[i];
a.i = i; //set a property of the current element with the current value of i
a.onclick = function() { alert( this.i ) }
document.body.appendChild( a );
}
他の誰かが何か違うことをしていますか?
本当にスマートな方法はありますか?
図書館がこれをどのように行うか知っている人はいますか?