JavaScript 点击处理程序在 for 循环内无法按预期工作[重复]

2023-12-25

我正在尝试学习 JS,但遇到了一个问题。

我尝试了很多事情并用谷歌搜索但都是徒劳。以下代码无法按预期工作。我应该得到的值i单击但它总是返回 6。我正在拔头发;请帮忙。

for (var i = 1; i < 6; i++) {

    console.log(i);

    $("#div" + i).click(
        function() {
            alert(i);
        }
    );
}

jsfiddle http://jsfiddle.net/rmXcF/


工作演示 http://jsfiddle.net/rmXcF/1/

这是一个经典的 JavaScript 闭包问题。参考i对象被存储在点击处理程序闭包中,而不是实际值i.

每个单击处理程序都将引用同一个对象,因为只有一个计数器对象保存 6,因此每次单击都会获得 6 个值。

解决方法是将其包装在匿名函数中并将 i 作为参数传递。原语在函数调用中按值复制。

for(var i=1; i<6; i++) {
     (function (i) {
        $("#div" + i).click(
            function () { alert(i); }
        );
     })(i);
}

UPDATE

更新演示 http://jsfiddle.net/rmXcF/4/

或者你可以使用'let' https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let反而var声明i. let每次都给您带来新鲜的绑定。它只能在 ECMAScript 6 中使用strict mode.

'use strict';

for(let i=1; i<6; i++) {

        $("#div" + i).click(
            function () { alert(i); }
        );
 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 点击处理程序在 for 循环内无法按预期工作[重复] 的相关文章

  • Jasmine 条件 callThrough 和 callFake

    我有一个返回函数引用的方法 function methodetobeMoked param case1 return func1 case 2 return func2 case n return funcN 我需要监视这个方法并返回特定输
  • Node + now.js + 模型-视图-控制-模式

    我正在使用基于 MVC 模式 模板和 PHP 类 的论坛软件 页面如下所示 domain com index php page Test 我想使用 Node 和 now js 在一个页面 domain com index php page
  • 非常基本的 JS 编码,是否有 SoundManager2?

    我想在我的网站上包含一个具有以下属性的音频 可能的视频播放器 必须可通过 div 通过 CSS 设计样式 可以读取所有ID3信息 可以从数据库中提取文件 可能是 GoDaddy 的 Easy Database 无闪光 可转移至智能手机等 我
  • ScrollTop 在 Chrome/Safari 中不起作用

    我的网站上有一个循环内的表单 当有人提交表单时 查询字符串会添加到 URL 中 例如 updated 111 然后 我的 JQuery 脚本检查数字的 url 并在提交表单并重新加载页面后滚动到该 div 该脚本在 Firefox 中运行良
  • 如何使用jquery格式化数字

    我正在尝试删除 之后的数字 然后我想格式化数字 16810900 211233 喜欢这个 16 810 900 但我不知道该怎么做 这是我的 html 是这样的 div class main p class active 10200 00
  • 流媒体性能 - Canvas 与

    我正在开发一个应用程序 需要通过 webSocket 连接以每秒至少 30 帧的速度持续传输图像 我遇到了一些性能问题 并希望尽我所能进行优化 我想知道使用不断更新的图像之间的性能差异是什么 就像这样 img src someDynamic
  • 如何更改点击事件上的引导插入符指向方向

    我正在使用 2 3 2 引导程序 因为当我单击菜单按钮时 我可以更改插入符号图标的位置 我需要当我单击图标插入符号向上时 当您单击另一个项目时 插入符号返回到初始状态 这怎么可能 导航代码 div div class container d
  • 将其作为参数传递给 addEventListener()

    我想添加change一组复选框的事件 我如何访问this在我的事件函数中 这样当我执行事件时我可以访问复选框的值 这是我当前的代码 var checkboxes document getElementsByClassName cb Arra
  • 我什么时候应该使用内联和外部 Javascript?

    我想知道什么时候应该包含外部脚本或将它们与 html 代码内联编写 就性能和易于维护而言 这方面的一般做法是什么 真实场景 我有几个需要客户端表单验证的 html 页面 为此 我使用了一个包含在所有这些页面上的 jQuery 插件 但问题是
  • 如何垂直打印数组中的字符串元素? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个数组 我想垂直打印每个元素 例如 myArr abc def ghi 输出应该是 a d g b e h c f
  • Javascript“命名空间”和 jQuery AJAX

    我正在使用此处列出的建议 http www odetocode com articles 473 aspx http www odetocode com articles 473 aspx 使用模拟的JavaScript AJAX网络聊天系
  • React JS“this”没有按预期工作

    我有下面的代码 save function var this this console log this refs itemText this setState isEditing false function console log In
  • 上传前如何检查图片的宽度和高度

    对于图片上传 我编写了以下 html 代码
  • 使用 jQuery 更改 SVG 元素的“xlink:href”属性

    我正在尝试使用单击事件更改 xlink href 属性 到目前为止它部分有效 这就是我正在做的 HTML a href class ui btn ui corner all ui shadow editIcon style text ali
  • Webpack:如何将 javascript 注入 HTML 而不是单独的 JS 文件

    有没有办法让 webpack 将输出注入 HTML 而不是单独的文件 我不得不使用html webpack inline source plugin https github com DustinJackson html webpack i
  • Bootstrap 3 - 模态背景不会根据模态对话框的高度调整大小?

    我将一个表单放入模式中 并尝试在用户触发单选按钮时显示表单的一些隐藏字段 显示隐藏字段后 模态自动重新缩放的高度 但模态背景的高度不能用作模态对话框 我该如何解决它 div class modal fade div class modal
  • 在 Sublime Text 下获取完整的 JS 自动补全

    我刚刚在 Windows Vista 下安装了 Sublime Text 甚至遵循了中给出的建议这个帖子 https stackoverflow com questions 10636410 modifying sublime text 2
  • 检测图像是否损坏或损坏

    我需要以编程方式检查用户在我的应用程序上选择作为壁纸的图像是否已损坏或损坏 基本上我为用户提供了选择自己的图像作为壁纸的选项 现在 当图像加载时 我只想检查它是否已损坏 如果您正在寻找 PHP 解决方案而不是 javascript 解决方案
  • 在 Map() 的条目上使用 Promise.all

    我正在使用 Map 来表示一些键 值对 let myMap new Map myMap set foo bar myMap set foo2 bar42 对于每个 Map 条目 我执行一个返回 Promise 的函数 所有这些 Promis
  • Chrome 中的 addEventListener

    我正在关注 Lynda com 上有关新 DOM 事件模型的教程 这是我正在使用的代码 function addEventHandler oNode sEvt fFunc bCapture if typeof window event un

随机推荐

  • 使用单步旋转时如何实现平滑的动画/如何在旋转开始时获取新的帧大小?

    我正在尝试从两级旋转切换为一级旋转 以避免控制台警告 并且因为苹果建议这样做 因为一级旋转速度更快 但是 我不知道如何尽早获取视图的新大小 考虑到导航栏 状态栏等 以便在动画期间执行 UI 更新 而不是简单地将项目捕捉到它们的位置 就像许多
  • 延迟加载样板模块

    在boilerplatejs中 模块似乎是预先加载的 参考下面的代码 return require baseModule module require sampleModule2 module require customerModule
  • 为节点分配多个属性

    我想为我的节点分配一个属性 目前我正在使用以下数据示例创建一个网络 Attribute Source Target Weight Label 87 5 Heisenberg Pauli 66 3 1 12 5 Beckham Messi 3
  • 如何在C++中从Windows注册表获取计算机制造商和型号?

    我正在编写自己的 C 代码 通过读取和解析注册表项来读取 Windows 计算机上的计算机型号和制造商 HKEY LOCAL MACHINE SYSTEM CurrentControlSet services mssmbios Data S
  • 配置 Docker 守护进程端口以启用 Docker API

    我试图配置Docker 守护进程端口如中提到的a link https docs docker com engine admin configure the docker daemon cat etc docker daemon json
  • python dropbox api错误

    我正在按照教程进行操作here https www dropbox com developers start files python 到目前为止一切顺利 但上传示例给了我错误 代码 from dropbox import client r
  • 如何在 Windows Phone 上执行 CreateBindingSet()?

    在N 1视频 34 Progress 中 有一个针对Android版本使用CreateBindingSet 的示例 这并不典型 但解说员也简单提到 在Windows平台上也可以做同样的事情 然而 尽我所能 我无法将视图的属性绑定到 Wind
  • app.config 连接字符串的文件转换任务

    我正在设置一个发布管道任务来使用变量替换多个连接字符串值来转换我的 app config 这些属性不在节点中 而是在单独的节点中 文件转换任务是否仅适用于节点或文件中任何位置的设置 连接字符串属性上的属性是名称和 connectionStr
  • 函数调用栈:train_function

    我在训练使用 keras 创建的功能模型时遇到以下错误 File D Age prediction testmatrixshape py line 34 in
  • python 乌龟中的逻辑错误

    我正在用 python 3 2 海龟编码 我有一张漂亮的坦克图 我知道如何向左移动并书写 然而 当试图使坦克上下移动时 我面临的问题是它会上升 但如果我松开并再次按下向上按钮 它转向左侧 可能很难解释 所以我包含了代码 Programmer
  • Xpath substring-before 只获取一个元素

  • 如何重新抛出异常并保留堆栈跟踪?

    这段代码 try try throw 1 catch e s print e s throw e catch e2 s2 print e2 s2 prints 1 0 main file test dart 34 7 1 0 main fi
  • RVM Requiremets 尝试利用已弃用的自制软件/版本

    我正在尝试让 Ruby on Rails 项目在我的 Mac OS Sierra 10 13 3 计算机上运行 当我导航到 Rails 文件夹时 RVM 告诉我以下信息 Required ruby 1 9 3 p392 is not ins
  • CSS:在列表项中显示彼此相邻的图像和div

    当我今天早上出发时 任务似乎很简单 建立一个元素列表 每个元素由缩略图 标题和副标题组成 我想让图像与其旁边的标题和副标题对齐 如果您查看 YouTube 视频页面 相关视频 框具有类似的布局 UPDATE 更具体地说 我正在尝试生成两列布
  • matplotlib:从图中删除补丁

    我在用matplotlib to interactively绘制一些patches and points 我通过队列从单独的进程接收数据并将它们发送到我的绘图进程 这部分代码工作正常 点显示在图表上 并按预期在图中不断更新 根据用户的要求
  • 第二高薪水

    编写一个 SQL 查询从 Employee 表中获取第二高的工资 Id Salary 1 100 2 200 3 300 例如 对于上面的 Employee 表 查询应返回 200 作为第二高薪水 如果没有第二高的薪水 则查询应返回 nul
  • SQL Server 2008 安装

    我正在尝试在启用 Win 7 的笔记本电脑上安装 MS SQL Server 2008 我在选择安装路径时遇到问题 当我继续选择 安装 然后单击 新的 SQL Server 独立安装或向现有安装添加功能 时 会弹出一个浏览对话框以选择安装文
  • Azure Functions ARM 模板部署删除函数

    我有一个 ARM 模板 包含在下面 来部署 Azure Function App 我将其部署为 az group deployment create resource group my group template file my func
  • 在 Excel 2013 中连接 Hortonworks Hive ODBC 时出错

    我正在尝试通过 Excel 2013 中的 ODBC 驱动程序查询 Hortonworks Hive 我在这里下载了驱动程序 32位 http hortonworks com downloads http hortonworks com d
  • JavaScript 点击处理程序在 for 循环内无法按预期工作[重复]

    这个问题在这里已经有答案了 我正在尝试学习 JS 但遇到了一个问题 我尝试了很多事情并用谷歌搜索但都是徒劳 以下代码无法按预期工作 我应该得到的值i单击但它总是返回 6 我正在拔头发 请帮忙 for var i 1 i lt 6 i con