将变量传递给事件 javascript - 没有闭包,没有 jq,避免 evals 等

2023-12-19

好吧,每个人都已经解决了这个问题,但我觉得还没有更了解该怎么做。

我想要一个循环来设置一堆点击处理程序,并为每个处理程序提供唯一的参数。我现在正在做这样的事情:

for (thisThing in things){
    myDiv=document.createElement('img');

    myDiv.onclick=function(){
        // do somehting!
        // but don't do anything with "thisThing" 
        // because it's got the wrong value in it by the time you call it!
        // but this function has to have the value of "thisThing" to work, dammit!
    }
}
  • 到处都说这个问题的解决方案是闭包 - 哇太棒了!除了闭包打破即(对吗?)
  • 否则,我可以当场评估代码,在变量中进行烘焙,但这充其量看起来很难看,而且似乎可能会破坏一些东西

那么这给我留下了什么?倒闭好吗?评估好吗?我是唯一一个在网络上动态创建按钮的人吗?!?任何帮助都感激不尽。对于这个基本的问题感到抱歉,事实上,这是经常回答的问题。

此页面具有迄今为止我找到的最完整的答案,但是,它表明闭包始终是解决方案。诅咒!http://www.howtocreate.co.uk/referencedvariables.html http://www.howtocreate.co.uk/referencedvariables.html


关闭确实not破解IE。

(function(someThing) {
    myDiv.onclick=function(){
       // Access it as "someThing"
    }
})(thisThing);

jsFiddle http://jsfiddle.net/alexdickson/vRjYb/.

问题是分配给的功能onclickproperty 创建一个闭包,它可以访问其父变量。

当您准备好单击某个元素时,它thisThing已增加到终止循环的最终值(在您的情况下迭代的最后一个属性),因为它访问外部变量,而不是副本。

通过使用新的自调用函数创建新的闭包并传递thisThing,其值成为变量someThing并且仅存在于内部函数内部。

这是缓解这个已知问题的方法之一。

请注意,在 IE6 和 7 中存在内存泄漏。咨询RobG https://stackoverflow.com/questions/6065880/pass-variables-to-an-event-javascript-no-closures-no-jq-avoid-evals-such/6065973#6065973 or 雷诺斯的回答 https://stackoverflow.com/questions/6065880/pass-variables-to-an-event-javascript-no-closures-no-jq-avoid-evals-such/6065902#6065902来解决这个问题。

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

将变量传递给事件 javascript - 没有闭包,没有 jq,避免 evals 等 的相关文章

随机推荐

  • 查找数组中所有元素都具有特定值的文档

    这基本上是一个简单的问题 但我找不到它的查询函数 示例集合 id 1 foo bar 9 bar 16 id 2 foo bar 9 bar 9 bar 9 示例输出 id 2 foo bar 9 bar 9 bar 9 因为这是唯一一个每
  • python pyplot连接点

    我正在使用一组点制作 pyplot 图 plt plot range 0 10 dictionary key bo 这按照我的预期正确地绘制了点 但是我也希望在这些点之间绘制一条线 我找不到用 pyplot 来做到这一点的方法 我认为这是微
  • Oracle 中完全外连接的奇怪行为 - 如何解释?

    我注意到 Oracle 11 中 FULL OUTER JOIN 的奇怪行为 我正在连接 HR 模式中的表 特别是 EMPLOYEES 和 DEPARTMENTS 例如 以下查询返回 123 行 SELECT FROM employees
  • 使用 $resource 承诺模式缓存数据

    假设我的服务从 resource get 返回一个承诺 我想知道这是否是缓存数据的正确方法 在此示例中 点击后退箭头并返回搜索结果后 我不想再次查询网络服务器 因为我已经有了它们 这是处理这种情况的正确模式吗 下面的示例是查询 Flixte
  • 转换时间字符串格式

    我想将时间数据转换为格式HH mm ss在 JavaScript 中 我的代码有问题 请参阅代码内的注释 function parseTime timeString var timeString timeString toLowerCase
  • 如何简化Java中的印度区字符串? (问题扩展)

    我有一系列印度地区 例如String districts district1 district2 district3 等等 也许是印度的全部或部分地区 认为 District1 district2 district3 是拉贾斯坦邦的区 An
  • 删除 Google 地图圆形/形状

    我正在使用 google maps Circle 方法创建一个 Circle 这一切都工作得很好 但是我怎样才能删除这个圆圈呢 My code var populationOptionsAgain strokeColor c4c4c4 st
  • 如何测试断言?

    我发现如何测试异常或错误 https stackoverflow com a 54241438 6509751 https stackoverflow com a 54241438 6509751 但我如何测试以下内容assert工作正常吗
  • 抓取非英文网站的编码问题

    我试图将网页的内容作为字符串获取 我发现这个问题解决了如何编写一个基本的网络爬虫 https stackoverflow com questions 1381617 simplest way to correctly load html f
  • 在 INSTEAD OF INSERT 触发器的 OUTPUT 子句中,是否可以引用两个 INSERTED 表?

    SQL Server 2005 我有一个观点INSTEAD OF INSERT扳机 在触发器的主体内部 我想使用带有OUTPUT引用两者的子句INSERTED tables 外层INSERTED表为INSTEAD OF INSERT tri
  • autoconf 配置警告:/usr/bin/file:没有这样的文件或目录

    当我在 ubuntu 操作系统 16 中使用我的配置时 似乎没有问题 我已经安装了 autoconf 工具和依赖项 当我在 ubuntu 16 或最新版本 中运行相同的配置文件时 问题是我没有安装任何自动工具 我收到以下错误消息 confi
  • 如何在 Google 云存储中下载多个文件

    场景 项目团队成员可以访问的存储桶中存储有多个文件夹和许多文件 有没有一种方法可以下载整个文件夹 而不是一次下载一个文件 这非常慢且耗时 或者至少一次多个文件 是否可以在不使用命令控制台之一的情况下实现这一点 一些团队成员不懂技术 需要尽可
  • SVG 的 Typescript 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我一直在使用 Raphael 和 Angular 4 应用程序 也尝试切换到 Snap 这些都不能很好
  • 为什么使用 PredicateBuilder 的这段代码不起作用?

    为什么我的列表没有返回任何内容 class Program static void Main string args var list new List
  • Codeigniter form_helper 获取数据库行作为选择菜单中的值

    我正在编写一个表单 其中有一个选择菜单 我希望从数据库中提取值 所以我认为这将是这样的 My view 我的控制器 function add content data array this gt is logged
  • Keycloak H2登录失败:约束已存在

    我们使用 keycloak 和 h2 数据库 直到昨天 一切进展顺利 当时 keycloak 突然无法连接到 h2 数据库 Constraint FK OUSE064PLMLR732LXJCN1Q5F1 already exists SQL
  • .NET 4.0 中的 System.Linq 在哪里?

    我将一个 asp net 应用程序迁移到 4 0 现在我收到错误 找不到类型或命名空间名称 IQueryable 对 System Linq 的引用无效 我在引用列表中找不到它 System Linq 到哪里去了 确保您正在引用System
  • Reactjs - 使用 xlsx.utils.json_to_sheet 导出到 Excel

    我正在使用 xlsx npm 包将数据导出到 Excel 以下代码按预期工作并导出数据 我需要应用如下所示的一些样式 请帮忙 标题应该是粗体 标题背景应该是灰色的 应用边框 进口声明 import as XLSX from xlsx Cod
  • 角度重复 n 次

    我有一个包含 int 属性的 JSON 对象x 我想重复下面的代码x次 span class glyphicon glyphicon star span ng repeat 似乎没有被指出 因为它正在与集合一起使用 任何建议 角度新手 我会
  • 将变量传递给事件 javascript - 没有闭包,没有 jq,避免 evals 等

    好吧 每个人都已经解决了这个问题 但我觉得还没有更了解该怎么做 我想要一个循环来设置一堆点击处理程序 并为每个处理程序提供唯一的参数 我现在正在做这样的事情 for thisThing in things myDiv document cr