Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将索引传递给addEventListener_Javascript_Html - Fatal编程技术网

Javascript 如何将索引传递给addEventListener

Javascript 如何将索引传递给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);

我正在复选框上使用事件侦听器,我需要能够传入索引。目前它总是将索引保存为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);
    }, 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);
    })()
}