为一组元素动态创建回调函数

时间:2012-11-16 10:15:50

标签: javascript jquery callback

变量myCollection包含jQuery个DOM元素,我想为每个callback事件设置onclick函数,如下所示。实际上我想要的是,逐步设置或者可以说" burn"每个元素的number,所以当它们被点击时,它自己的号码会被警告。当代码在上一次循环中递增时,此代码会警告number的最后一个值。

var number = 1;

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

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

如何为每个元素复制或实例化回调函数,以便它们具有相同的进程但是有不同的参数绑定到它们?

1 个答案:

答案 0 :(得分: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);
    });
});