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

发布于 2024-11-15 17:27:17 字数 361 浏览 1 评论 0原文

为什么在下面的代码中我的更新业务函数总是用数组中的最终值更新输入

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

How come in the following code my update business function always updates the input with the final value in the array

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

孤凫 2024-11-22 17:27:17

这里的问题是所有这些事件处理函数将共享完全相同的“place”变量;只有一个。相对于事件处理程序,它就像一个全局变量。

您可以编写一个单独的函数来提供帮助:

  function makeHandler(place) {
     return function() {
       update_business(place.name);
     };
   }

然后您可以在循环中调用它:

 var input = $('<input/>').change(makeHandler(place));

该函数返回另一个函数,该函数实际上将用作事件处理程序。因为循环中的变量“place”作为参数传递给“makeHandler”函数,所以它是循环中特定迭代中“place”的唯一副本。因此,每个事件处理程序都有它自己的“位置”。

The problem here is that all those event handler functions are going to share exactly the same "place" variable; there's only one. Relative to the event handlers it's like a global variable.

You can write a separate function to help:

  function makeHandler(place) {
     return function() {
       update_business(place.name);
     };
   }

Then you can call it in the loop:

 var input = $('<input/>').change(makeHandler(place));

The function returns another function, which is the thing that'll actually be used as the event handler. Because the variable "place" from the loop is passed in as an argument to the "makeHandler" function, it's a unique copy of "place" at a particular iteration through the loop. Thus, each event handler has it's very own "place".

迟到的我 2024-11-22 17:27:17

您的内部函数封闭了外部变量本身,而不是其值的副本。

您需要通过不使用封闭变量来按值传递它,但新变量的生命周期更短。

(function(j) {
    var place = results[j];
    ...
})(i);

这里,i 的值作为 j 参数传递给自调用匿名函数,并且 j 将始终是 i< /code> 是在调用该函数时。

Your inner function has closure to the outer variable itself, not a copy of its value.

You need to pass it by value by not using the closed over variable, but a new one of whoms lifespan is briefer.

(function(j) {
    var place = results[j];
    ...
})(i);

Here the value of i is passed to the self invoking anonymous function as the j argument, and j will always be what i was at the time of that function being called.

乜一 2024-11-22 17:27:17

.val() 将替换该值而不是附加该值。
如果您想添加到当前值,请尝试使用 .append。

文档此处

.val() will replace the value instead of appending the value.
try using .append if you wish to add on to your current value.

documentation here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文