gpt4 book ai didi

javascript - for循环中的jquery迭代器

转载 作者:行者123 更新时间:2023-12-03 02:09:45 25 4
gpt4 key购买 nike

我是 JavaScript 和 jQuery 新手。我发现了一个我自己无法解决的问题。

for (i = 0; i < 12; i++)
{
$("#c" + i).on("click", function () { alert(i) });
}

它使用alert(12)而不是alert(i)将事件附加到id从c0到c11的每个元素...

另一方面

$("#c0").on("click", function () { alert(0) });
$("#c1").on("click", function () { alert(1) });
$("#c2").on("click", function () { alert(2) });
...

效果很好。是不是一样?

最佳答案

这是因为 var 关键字的工作方式,也是因为

$("#c" + i).on("click", function () { alert(i) });`

本质上是异步的。

只需这样做即可,

快速修复

for (let i = 0; i < 12; i++)
{
$("#c" + i).on("click", function () { alert(i) });
}

解释:您的代码不起作用,因为 $('#c').on('click', fun) 本质上是异步的,这意味着这个函数 function () {alert(i) } 将稍后执行,当发生时,您的 for 循环将以 i = 12 的值完成,因此,您将得到 12 作为所有处理程序的值。

现在的问题是如何添加 let 解决这个问题

答案很简单,Let 遵循 block 作用域,而 var 或 no var (global) 则不是 block 作用域。 var 具有函数作用域,要使用 var 实现相同的作用,您需要执行类似的操作。

for(var i = 0; i < 12; i++) {
(function(i) {
$("#c" + i).on("click", function () { alert(i) });
})(i);
}

关于javascript - for循环中的jquery迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49630288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com