为什么我的事件处理程序从动态创建的元素中的最后一个循环迭代接收值?
事件处理程序和闭包中的变量引用
在此场景中,您将在循环中使用事件处理程序动态创建元素。最初,目的是根据循环迭代将不同的值传递给事件处理程序。但是,事件处理程序似乎正在接收来自上次循环迭代的值,这表明存在范围问题。
事实上,代码的问题在于在循环中使用匿名函数作为事件处理程序。正如您所怀疑的那样,事件处理函数是引用循环内变量的闭包。当事件触发时,循环已完成,引用的变量保存上次迭代中分配的最终值。
实现闭包
解决此问题问题并将预期值正确传递给事件处理程序,您需要实现一个在循环执行时捕获变量的闭包。通过这样做,每个事件处理程序将拥有对其所需的特定值的自己的引用。
以下修改后的代码通过将事件处理程序函数包装在另一个立即调用的匿名函数(也称为IIFE,即立即调用函数表达式):
for(var i = 0; i < blah.length; i++) { var td = document.createElement('td'); var select = document.createElement('select'); select.setAttribute("...", "..."); select.onchange = function(s, c, a) { return function() { onStatusChanged(s, c, a); } }(select, callid, anotherid); td.appendChild(select); }
登录后复制
在此修改后的代码中,内部 IIFE 返回实际的事件处理函数,同时接收传入的必要参数(select、callid、anotherid)从循环中。通过在循环执行时捕获这些值,您可以有效地为每个事件处理程序创建一个单独的作用域。
此技术可确保每个事件处理程序在事件发生时都有自己对所需值的引用,从而解决值引用不当的问题。
以上是为什么我的事件处理程序从动态创建的元素中的最后一个循环迭代接收值?的详细内容。更多信息请关注PHP中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前
By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保护它?
3 周前
By DDD

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)