javascript - 根据迭代器更改 eventListener 函数参数。 (原版 JS)

标签 javascript

我想要什么: 我有一个方法,它将 int 作为其唯一参数,然后我创建一个列表,其中每个元素在单击时将调用另一个函数,我唯一想要更改的是每个元素在单击时传递的数字。

我有:

while(++i<e){
    (...)
    a.addEventListener('click',function(){selectUser(i)},false);
    (...)
}

当然,明显的问题是,当调用时,它总是会传递'i'的最终值。 我需要每个元素传递“i”创建时所具有的值。 IE;当 i=3 时,我希望它翻译成:

a.addEventListener('click',function(){selectUser(3)},false);

我猜它涉及某种方法,该方法返回另一个具有实际值的方法,但我不太确定如何实现它。我对 js 的经验很少。

提前致谢。

最佳答案

这是一个经典的闭包问题。您必须将事件处理程序包含在闭包函数中,该函数保留变量 i 的状态。像这样...

while(++i<e){
    (...)
    (function(index){
    a.addEventListener('click',function(){selectUser(index)},false);
    })(i);
    (...)
}

这样,包装函数的每次调用都会保留变量 i 的状态,从而为您提供正确的结果。

关于javascript - 根据迭代器更改 eventListener 函数参数。 (原版 JS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17945586/

相关文章:

javascript - 商店的 React/Redux props 属性未定义

javascript - 如何在 web worker 中使用 webpack 编译 node_module?

javascript - 如何通过html将flask base_url发送到js文件

javascript - 未选择自动完成选项时如何禁用输入 : Google Maps SearchBox

javascript - 使用 angular.js 访问和修改在模板中启动的模型

javascript - 主干和 jQuery 事件

javascript - 我可以在 loopbackjs API 中禁用 `includes` 过滤器功能吗?

javascript - 在 native react 中以不同方式对齐两个 child

javascript - 无法使用 AngularJS 移动元素

javascript - 为什么这个函数没有被调用?