如何在以下代码中使用更新业务功能始终使用数组中的最终值更新输入
for (var i = 0; i < results.length; i++) {
var place = results[i];
var input = $("<input/>").change(function(){update_business(place.name)});
...
}
function update_business(value){
$('#business input').val(value);
}
答案 0 :(得分:2)
这里的问题是所有这些事件处理函数都将共享完全相同的“place”变量;只有一个。相对于事件处理程序,它就像一个全局变量。
您可以编写单独的功能来帮助:
function makeHandler(place) {
return function() {
update_business(place.name);
};
}
然后你可以在循环中调用它:
var input = $('<input/>').change(makeHandler(place));
该函数返回另一个函数,它实际上将用作事件处理程序。因为来自循环的变量“place”作为参数传递给“makeHandler”函数,所以它是循环中特定迭代的“地点”的唯一副本。因此,每个事件处理程序都有它自己的“位置”。
答案 1 :(得分:1)
你的内部函数关闭外部变量本身,不是其值的副本。
你需要通过不使用关闭的over变量来按值传递它,但是新的生命周期更简洁。
(function(j) {
var place = results[j];
...
})(i);
此处i
的值作为j
参数传递给自调用匿名函数,而j
将始终是i
时的{{1}}。被调用的函数。
答案 2 :(得分:0)
.val()将替换值而不是附加值。 如果你想加上你当前的值,请尝试使用.append。
文档here。