Javascript 如何将索引传递给addEventListener
我正在复选框上使用事件侦听器,我需要能够传入索引。目前它总是将索引保存为2。组数组的长度为2Javascript 如何将索引传递给addEventListener,javascript,html,Javascript,Html,我正在复选框上使用事件侦听器,我需要能够传入索引。目前它总是将索引保存为2。组数组的长度为2 for(var i = 0; i < groups.length; i++) { var input1 = document.createElement('input'); input1.type = "checkbox"; input1.addEventListener('click', function () { console.log(i);
for(var i = 0; i < groups.length; i++) {
var input1 = document.createElement('input');
input1.type = "checkbox";
input1.addEventListener('click', function () {
console.log(i);
}, false);
}
for(变量i=0;i
用于(变量i=0;i
索引总是保存为两个,因为函数是异步调用的。它不是在定义事件侦听器时检查索引,而是在调用它时检查索引。这意味着在调用函数时,循环可能已经终止,因此它看到索引的最终值为2。这段代码的作用是执行一个立即调用的函数,以便在定义事件侦听器时将索引保存在一个闭包中,并将其引用回该闭包。我创建了一个JSFIDLE来测试这一点,但控制台没有记录任何内容。在那个JS提琴中,我根本看不到要单击的元素,一个复选框。这就是你看到的吗?使用
let
更容易。你说得对。我需要调用复选框,以便它记录任何内容。我想这就是我为简洁所得到的。添加var j=我使代码按预期工作。是否要计算单击次数?在一个正确构造的for
循环中,如果这是组的总数,那么最多只能得到2。length
。有什么问题?顺便说一句,请同时提供HTML,否则我们怎么知道会发生什么?我希望能够将组数组的当前索引传递到另一个函数中。此代码应为组中包含对特定组的引用的每个项目创建一个“复选框”。
for(var i = 0; i < groups.length; i++) {
(function(){
var parent = document.getElementById("sidebar-wrapper");
var input1 = document.createElement('input');
input1.type = "checkbox";
input1.addEventListener('click', function () {
var j = i;
var iMinus1 = j-1;
console.log(j);
setSelectedGroups(this, groups[iMinus1]);
}, false);
})()
}