1

変数myCollectionはDOM 要素を保持し、以下に示すように、各イベントに関数jQueryを設定したいと考えています。実際に私が望むのは、要素ごとにインクリメンタルに設定するか、「焼き付ける」と言うことができるので、それらがクリックされると、独自の番号が警告されます。このコードは、前回ループでインクリメントされたときの最後の値を警告します。callbackonclicknumbernumber

var number = 1;

myCollection.each(function(){
    this.onclick = function() { someFunction(number) };
    number++;
});

//This function is somewhere else, but accessible.
function someFunction(number) {
    alert(number);
}

各要素のコールバック関数をコピーまたはインスタンス化するにはどうすればよいですか?そのため、それらは同じプロセスを持ちますが、異なる引数がそれらにバインドされます。

4

1 に答える 1

3

古典的なスコープの問題は、次のように解決できます。

myCollection.each(function(){
  this.onclick=(function(number) {
      // in this scope, number has been "burned"
      return function() {
          someFunction(number)
      };
  }(number));
  number++;
});

jQuery には、各コールバック内に正しくスコープされたインデックスが既に含まれていることに注意してください。

myCollection.each(function(i){
    $(this).click(function(){
        someFunction(i+1);
    });
});
于 2012-11-16T10:19:25.673 に答える