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