0

独自の ID 番号で onclicks を作成しようとするループがありますが、ループ内の最後の番号に更新され続けます - 変数の書き込みを停止して独自の番号を保持するにはどうすればよいでしょうか

これは私が持っているものです:

count = 0;
for(i in my_array){ 
    if(my_array[i][2])){ //if the data value is true
        document.getElementById('div_id_'+count).onclick = function()
        {
            alert(i);
        };
    count++;
    }   
}

事は、alert(i) は常に my_array の最後の値を表示することです...だから、各 div が独自の値を解析できるように、毎回上書きを停止する方法を知りたいですか?

4

3 に答える 3

3

Closureで問題が発生しています。トリッキーなトピックです。このURLを確認してください:http ://code.google.com/apis/ajax/playground/#closure_for_events

基本的にi、要素をクリックすると値が評価されます。イベントを割り当てるときではないので、その時点iでループの最後の値に設定されます。パラメータを受け取るクリックイベントにバインドする別の関数を作成する必要がありiます。例:

function HandleClick(i){
  return function() { alert(i); };
}

count = 0;
for(i in my_array){ 
    if(my_array[i][2])){ //if the data value is true
        document.getElementById('div_id_'+count).onclick = HandleClick(i);
    count++;
    }   
}

これで、HandleClick関数はの独自のクロージャを作成しi、ループから渡された値に設定されます。

于 2012-08-31T00:47:14.913 に答える
1

要素に値を隠します:

var count = 0;
for (var i in my_array)
{ 
    if (my_array[i][2])) //if the data value is true
    {
        var el = document.getElementById('div_id_'+count);
        el.setAttribute("my_value", i);
        el.onclick = function()
        {
            alert(this.getAttribute("my_value"));
        };
        count++;
    }   
}
于 2012-08-31T00:46:21.543 に答える
1
count = 0;
my_array.forEach(function(i) { 
    if(my_array[i][2])){ //if the data value is true
        document.getElementById('div_id_'+count).onclick = function()
        {
            alert(i);
        };
    count++;
    }
});  

my_array が配列ではなくオブジェクトの場合

count = 0;
Object.keys(my_array).forEach(function(i) { 
    if(my_array[i][2])){ //if the data value is true
        document.getElementById('div_id_'+count).onclick = function()
        {
            alert(i);
        };
    count++;
    }
});  
于 2012-08-31T00:39:55.863 に答える