Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.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/3/clojure/3.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获取click事件中数组元素的索引_Javascript_Html_Dom - Fatal编程技术网

如何使用JavaScript获取click事件中数组元素的索引

如何使用JavaScript获取click事件中数组元素的索引,javascript,html,dom,Javascript,Html,Dom,我正在开发一个Electron应用程序,对于代码的这一特定部分,有必要恢复当前元素的索引(单击) HTML: 它是“close”,但当我点击第一个复选框时,我得到了索引1,而在第二个复选框中我得到了3 请不要使用外部库,只使用纯JavaScript 使用.children而不是.childNodes.children提供不包括文本节点的子元素列表 在HTML中,当您很好地格式化源代码时,在和之间有文本节点使用.children而不是.childNodes.children提供不包括文本节点的子元

我正在开发一个Electron应用程序,对于代码的这一特定部分,有必要恢复当前元素的索引(单击)

HTML:

它是“close”,但当我点击第一个复选框时,我得到了索引1,而在第二个复选框中我得到了3


请不要使用外部库,只使用纯JavaScript

使用
.children
而不是
.childNodes
.children
提供不包括文本节点的子元素列表


在HTML中,当您很好地格式化源代码时,在
之间有文本节点使用
.children
而不是
.childNodes
.children
提供不包括文本节点的子元素列表


在HTML中,当您很好地格式化源代码时,在
之间有文本节点,您可以使用
更改
而不是
单击

$('.optionBox')。在('change',function()上{
$(this).each(function(){
如果(选中此项){
警报($(this.index());
}否则{
警惕(“未检查”);
}
});
});

10秒后最小化至托盘
始终检查日转换

您可以使用
更改
而不是
单击

$('.optionBox')。在('change',function()上{
$(this).each(function(){
如果(选中此项){
警报($(this.index());
}否则{
警惕(“未检查”);
}
});
});

10秒后最小化至托盘
始终检查日转换

将ModifierCheckBox[i]传递给BindModifierCheckBox函数。
因此,您可以发送当前复选框的权限,然后可以对其执行任何操作。

将ModifierCheckBox[i]传递给BindModifierCheckBox函数。 因此,您可以发送当前复选框的频率,然后您可以使用它执行任何操作。

利用:

利用:

这是一把小提琴:

这是一把小提琴:

另一个选择是给你的复选框id(这里我选择了蹩脚的):


10秒后最小化至托盘
始终检查日转换

然后看看
e.target.id

另一个选项是给你的复选框id(这里我选择了蹩脚的):


10秒后最小化至托盘
始终检查日转换

然后查看
e.target.id

也许您可以将对象选择器转换为数组,然后使用indexOf

var checks = document.querySelectorAll('.optionBox');

checks.forEach(function(check){
  check.addEventListener('click', checkIndex);
})

function checkIndex(event){
  console.log( Array.from(checks).indexOf(event.target) );
}

也许可以将对象选择器转换为数组,然后使用indexOf

var checks = document.querySelectorAll('.optionBox');

checks.forEach(function(check){
  check.addEventListener('click', checkIndex);
})

function checkIndex(event){
  console.log( Array.from(checks).indexOf(event.target) );
}

顺便说一句,
[].indexOf
数组.prototype.indexOf
@JohnHascall的较短版本。我的建议是不要使用
.indexOf
,因为它不兼容跨浏览器。还有其他更安全的JavaScript方法来检查字符串文本,等等。
.match()
.test()
分别实现
.indexOf()
的功能,并且是跨浏览器兼容的。是的,请注意,
[].indexOf
数组.prototype.indexOf
@JohnHascall的较短版本。我的建议是不要使用
.indexOf
,因为它不兼容跨浏览器。还有其他更安全的JavaScript方法来检查字符串文本,等等。
.match()
.test()
分别实现了
的功能。indexOf()
具有跨浏览器兼容性。是的,是的!唯一的问题是,您可能必须在侦听器中使用i+1,或者在修饰符函数中使用index+1。@Amir我想他希望这样,这样他就可以访问数组(可能是
customConf
)。而且很清楚。他可以根据自己的需要调整它,我也尝试过,但是变量I总是被值2捕获,传递modifiercheckbox[I]没有帮助either@RickStanley你是对的<当继续修改
i
时,for
会破坏闭包,每当执行
bindModifierCheckBox
时,它将在定义的范围内获取闭包,结果发现
i
现在等于数组的长度。但是
forEach
修复这个问题,因为它将为每个复选框(单独的作用域)创建一个
i
,所以现在它可以工作了。聪明!唯一的问题是,您可能必须在侦听器中使用i+1,或者在修饰符函数中使用index+1。@Amir我想他希望这样,这样他就可以访问数组(可能是
customConf
)。而且很清楚。他可以根据自己的需要调整它,我也尝试过,但是变量I总是被值2捕获,传递modifiercheckbox[I]没有帮助either@RickStanley你是对的<当继续修改
i
时,for
会破坏闭包,每当执行
bindModifierCheckBox
时,它将在定义的范围内获取闭包,结果发现
i
现在等于数组的长度。但是,
forEach
解决了这个问题,因为它会为每个复选框(单独的作用域)创建一个
i
,所以现在它可以工作了。但是你不需要太复杂。在这里,我使用您的方法得到了相同的结果,但方法更简单:
modifiercheckbox=document.querySelectorAll('.optionBox');modifiercheckbox.forEach(checkbox=>{checkbox.addEventListener('click',(e)=>{console.log(Array.from(plusBtns).indexOf(e.target))//…etc}
@codesb,但您不需要把它复杂化太多。在这里,我使用您的方法得到了相同的结果,但方法简单得多:
modifiercheckbox=document.querySelectorAll('.optionBox');ModifierCheckBox.forEach(复选框=>{checkbox.addEventListener('click',(e)=>{console.log(Array.from(plusBtns).indexOf(e.target))//…etc};}
@code
function bindModifierCheckBoxes(e){
    var t=e.target;
    console.log(Array.prototype.indexOf.call(t.parentNode.childNodes,t));
}
modifierCheckboxes = document.querySelectorAll('.optionBox');

modifierCheckboxes.forEach(function(checkbox, i) {
    checkbox.checked = customConf[i];;
    checkbox.addEventListener('click', function (e) {
        bindModifierCheckBoxes(e, i);
    });
});

function bindModifierCheckBoxes(e, index) {
    // index is passed inside the event listener function
}
function bindModifierCheckBoxes(e) {
    var t=e.target;
    var checkboxes = t.parentNode.getElementsByClassName('optionBox');
    console.log(Array.prototype.indexOf.call(checkboxes, t) + 1);
}
<div>
  <input type="checkbox" id="cb1" class="optionBox"> Minimize to tray after 10 seconds
  <input type="checkbox" id="cb2" class="optionBox"> Always check day transition
</div>
var checks = document.querySelectorAll('.optionBox');

checks.forEach(function(check){
  check.addEventListener('click', checkIndex);
})

function checkIndex(event){
  console.log( Array.from(checks).indexOf(event.target) );
}