javascript - for循环中的jquery迭代器

标签 javascript jquery for-loop iterator

我是 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/

相关文章:

javascript - 通过脚本函数调用bootstrap模态对话框

jquery - 如何在数据表中导出的 pdf 中设置标题样式

javascript - Ruby on Rails。使用共享数据加载动态部分布局

javascript - 字符串到 Javascript/Jquery 中的唯一哈希

java - 循环提前退出

javascript - 当执行 keyup 或 keydown 时,文本框获取值而不是 jQuery 自动完成的标签

javascript - 使用 jQuery load() 加载多个 ID - 更好的方法

javascript - 有没有办法在渲染或重新渲染组件时控制日志?

javascript - 找不到Java错误的原因和解决方案

Javascript - setTimeout 关闭问题