在此代码段中,我尝试将更改绑定到#r(Nth)e
<input>
元素,以更改#r(N+1th)s
<input>
元素的内容。但是,当我更改任何第N个<input>
元素时,显示的消息始终是&#34; #r(最后N)e更改处理程序&#34;
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());
});
}
答案 0 :(得分:1)
这是一个典型的&#34;关闭&#34;问题。
我正在尝试以最简单的方式摆脱关闭问题,所以我建议这种方式不正确:
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());
});
}
感谢你的学习,我意识到自己的错误,所以我根据他们的建议创建了一个测试模型:
var list = $("div");
for(var i = 0; i < list.length; i++){
$(list[i]).click((function(x){
return function(){alert(x);};
})(i));
}
HTH
答案 1 :(得分:1)
您应该使用所谓的 事件数据 将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());
});
}
注意:这只是直接 回答您提出的问题,我知道您的代码很乱,修复它不是主要的事情做。