我正在尝试将动态.change()
函数附加到元素列表中:
els = new Array('#element1','#element2');
for (i=1; i < 3; i++){
$(els[i]).change(function(){
alert(i);
});
}
这不能正常工作,因为i
没有传递给函数,而是总是等于最后一次迭代,即2.如何将值传递给change(function{})
?
答案 0 :(得分:2)
所有生成的函数都引用相同的变量:i
。当循环继续时,此变量随后会发生变化,因此,当您的更改事件触发时,i
将设置为2
。
您必须创建一个本地范围,在创建函数时存储i
的值:
els = new Array('#element1','#element2');
for (i=1; i < 3; i++){
(function(i){
$(els[i]).change(function(){
alert(i);
});
})(i);
}
答案 1 :(得分:2)
jQuery事件可以在signiture中获取eventData并将其作为参数传递给回调函数。来自jQuery docs:
.change( [eventData], handler(eventObject) )
你想要的是什么(我已经改变了arg名称以保持显而易见):
for (i=1; i < 3; i++){
$(els[i]).change({index: i}, function(event){
alert(event.data.index);
});
}
答案 2 :(得分:1)
这样做的两种方法。
使用
$.each
var element_array = new Array('#element1','#element2');
$.each( element_array, function( index, value ){
$(value).change(function(){
alert( index );
});
});
创建一个闭包。
var element_array = new Array('#element1','#element2');
for ( i = 0; i < element_array.length; i++){
(function(i){
$(element_array[i]).change(function(){
alert(i);
});
})(i);
}
答案 3 :(得分:0)
你有没有尝试过类似的东西:
els = new Array('#element1','#element2');
for (i=1; i < 3; i++){
$(els[i]).bind( 'change', function(){
alert(i);
});
}
当你加载页面时,jQuery不知道数组的值,它就像一个字符串。