变量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);
}
如何为每个元素复制或实例化回调函数,以便它们具有相同的进程但是有不同的参数绑定到它们?
答案 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);
});
});