javascript - jQuery:我无法在具有动态值的循环中设置值

标签 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)});

...

}

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”的唯一副本。因此,每个事件处理程序都有自己的“位置”。

关于javascript - jQuery:我无法在具有动态值的循环中设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6351802/

相关文章:

javascript - jQuery 父级或父级获取表标签中的数据属性

javascript - 通过 JavaScript 抓取 Reddit 数据

javascript - jquery - 对于包含字符串禁用按钮的每一行

javascript - Firebug 构造函数与用户函数

javascript - AngularJS 中带有无限滚动的授权拦截器

javascript - CSS 过渡和动画在开始动画完成后消失

javascript - 如何使用 Javascript Jquery 动态加载 HTML 进行解析?

在特定点打破长单词的 HTML 字符

javascript - 在生产中使用 SystemJS/jspm 加载异步、es5 模块

javascript - 缩略图在 Internet Explorer 6 中不保持其大小