如何解决jQuery:我不能在具有动态值的循环中设置一个值
|| 以下代码中的更新业务功能为何总是使用数组中的最终值更新输入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);
}
解决方法
这里的问题是所有这些事件处理函数都将共享完全相同的\“ place \”变量。只有一个。相对于事件处理程序,它就像一个全局变量。
您可以编写一个单独的函数来帮助:
function makeHandler(place) {
return function() {
update_business(place.name);
};
}
然后可以在循环中调用它:
var input = $(\'<input/>\').change(makeHandler(place));
该函数返回另一个函数,该函数实际上将用作事件处理程序。因为循环中的变量“ place”作为参数传递给“ makeHandler”函数,所以它是循环中特定迭代的“ place”的唯一副本。因此,每个事件处理程序都有它自己的“位置”。
, 您的内部函数对外部变量本身具有闭包,而不是其值的副本。
您不需要通过使用closed over变量来按值传递它,而是使用新的生命周期较短。
(function(j) {
var place = results[j];
...
})(i);
此处,i
的值作为j
参数传递给自调用匿名函数,anonymous6ѭ将始终是always5 be在调用该函数时的状态。
, .val()将替换值,而不是附加值。
如果您希望添加到当前值,请尝试使用.append。
文档在这里。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。