Javascript jQuery:I can';t使用动态值在循环中设置值
为什么在下面的代码中“我的更新”业务函数总是用数组中的最终值更新输入Javascript jQuery:I can';t使用动态值在循环中设置值,javascript,jquery,html,loops,onchange,Javascript,Jquery,Html,Loops,Onchange,为什么在下面的代码中“我的更新”业务函数总是用数组中的最终值更新输入 for (var i = 0; i < results.length; i++) { var place = results[i]; var input = $("<input/>").change(function(){update_business(place.name)}); 这里的问题是,所有这些事件处理程序函数将共享完全相同的“place”变量;只有一个。相对于事件处理程序,它就像一个全局变量 您
for (var i = 0; i < results.length; i++) {
var place = results[i];
var input = $("<input/>").change(function(){update_business(place.name)});
这里的问题是,所有这些事件处理程序函数将共享完全相同的“place”变量;只有一个。相对于事件处理程序,它就像一个全局变量 您可以编写一个单独的函数来帮助:
function makeHandler(place) {
return function() {
update_business(place.name);
};
}
然后您可以在循环中调用它:
var input = $('<input/>').change(makeHandler(place));
var-input=$('').change(makeHandler(place));
该函数返回另一个函数,该函数实际上将用作事件处理程序。因为循环中的变量“place”作为参数传递给“makeHandler”函数,所以它是循环中特定迭代中“place”的唯一副本。因此,每个事件处理程序都有自己的“位置”。内部函数对外部变量本身具有闭包,而不是其值的副本 您需要通过不使用closed-over变量来传递它的值,但是使用一个新的变量,它的寿命更短
(function(j) {
var place = results[j];
...
})(i);
这里,i
的值作为j
参数传递给自调用匿名函数,j
将始终是调用该函数时的i
。.val()将替换该值,而不是追加该值。
如果您希望添加到当前值,请尝试使用.append
文件
(function(j) {
var place = results[j];
...
})(i);