多个元素上的动态绑定处理程序将只调用最后一个绑定函数
Dynamically bond handler on multiple elements will call only last bond function
http://jsfiddle.net/7CV88/8/
在这个片段中,我尝试将change绑定到#r(Nth)e
<input>
元素,以更改#r(N+1th)s
<input>
元素的内容。但是,当我更改任何第N个<input>
元素时,显示的消息总是"#r(最后N个(e更改处理程序">
for(var i = 1; i < numRanges; i++){
$('#r'+i+'e').change(function(){
$('#messages').html('#r'+i+'e change handler');
$('#r'+(i+1)+'s').val($('#r'+i+'e').val());
});
}
您应该使用所谓的事件数据将i
的值传递到onchange
事件处理程序:
for(var i = 1; i < numRanges; i++){
$('#r'+i+'e').change(i, function(e){
$('#messages').html('#r'+e.data+'e change handler');
$('#r'+(e.data+1)+'s').val($('#r'+e.data+'e').val());
});
}
更新的演示
注意:这只是直接回答您提出的问题,我知道您的代码很乱,修复它不是主要的事情。
这是一个典型的"闭包"问题。
我正在尝试最简单的方法来解决关闭问题,所以我提出了这个错误的方法:
for(var i = 1; i < numRanges; i++){
$('#r'+i+'e').change(function(){
var tempVariable = i;
$('#messages').html('#r'+tempVariable +'e change handler');
$('#r'+(tempVariable +1)+'s').val($('#r'+tempVariable +'e').val());
});
}
多亏了metadings,我意识到了我的错误,所以我根据他们的建议创建了一个演示来测试:
var list = $("div");
for(var i = 0; i < list.length; i++){
$(list[i]).click((function(x){
return function(){alert(x);};
})(i));
}
http://jsfiddle.net/9qBXn/
HTH
相关文章:
- 表追加而不附加最后一个元素
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- AngularJS多资源调用,只处理最后一个
- 当使用promise时,为什么最后一个会被调用
- 如何记住asp.net中最后一个被调用的JavaScript函数
- 回调被多次调用,但我只想要最后一个回调
- 收集异步调用并提交最后一个
- 使用onload加载多个图像以调用函数,并且只有最后一个加载的图像调用该函数
- 如果在已经是最后一个元素上调用jQuery.next方法,那么它会返回什么
- Javascript只执行最后一个调用的函数
- async.js:forEachOf没有调用最后一个回调
- 当多个asyc调用完成时,AJAX启动最后一个asic调用
- 在Rails助手中使用Javascript调用验证文本字段时,如何返回最后一个有效输入
- 我试图验证一个表单与多个函数,但它只调用最后一个,即使我将它们与逗号结合
- 我如何使用className在单个调用中弹出()2个数组的最后一个元素
- 最后一个未使用async调用的回调
- 多个元素上的动态绑定处理程序将只调用最后一个绑定函数
- 当最后一个输入被填充时,JQuery ajax调用失败
- 调用标记数组中最后一个标记之前的标记位置
- Angularjs是指令中实际执行的最后一个异步调用