我正在开发一个电子应用程序,对于代码的这一特定部分,我需要恢复当前元素的索引(点击)。
HTML:
<div>
<input type="checkbox" class="optionBox"> Minimize to tray after 10 seconds
<input type="checkbox" class="optionBox"> Always check day transition
</div>
JavaScript的:
modifierCheckboxes = document.querySelectorAll('.optionBox');
for (var i = 0; i < modifierCheckboxes.length; i++) {
modifierCheckboxes[i].checked = customConf[i];
modifierCheckboxes[i].addEventListener('click', function (e) {
bindModifierCheckBoxes(e);
});
}
function bindModifierCheckBoxes(e) {
// I need the reference for modifierCheckboxes[i] here
}
我试过这个:
function bindModifierCheckBoxes(e){
var t=e.target;
console.log(Array.prototype.indexOf.call(t.parentNode.childNodes,t));
}
它来了&#34;关闭&#34;,但当我点击第一个复选框时,我得到索引1,而在第二个复选框中我得到3。
请不要使用外部库,只需简单的JavaScript。
答案 0 :(得分:3)
利用closures:
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
}
答案 1 :(得分:3)
也许您可以将Object选择器转换为数组,然后您可以使用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) );
}
答案 2 :(得分:2)
使用.children
代替.childNodes
... .children
提供不包含文字节点的子元素列表
在HTML中,当您很好地格式化源代码时,>
和<
之间的文本节点不会(通常)影响页面的呈现
答案 3 :(得分:1)
function bindModifierCheckBoxes(e) {
var t=e.target;
var checkboxes = t.parentNode.getElementsByClassName('optionBox');
console.log(Array.prototype.indexOf.call(checkboxes, t) + 1);
}
这是一个小提琴: https://jsfiddle.net/7p3gsy75/
答案 4 :(得分:1)
另一种选择是给你的复选框id(这里我选择了蹩脚的):
<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>
然后查看e.target.id
答案 5 :(得分:0)
将modifierCheckboxed [i]传递给bindModifierCheckBoxes函数。 所以你发送当前复选框的référence然后你可以用它做你想做的事。
答案 6 :(得分:-1)
您可以使用change
代替click
:
$('.optionBox').on('change', function() {
$(this).each(function() {
if (this.checked) {
alert($(this).index());
} else {
alert("unchecked");
}
});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<input type="checkbox" class="optionBox"> Minimize to tray after 10 seconds
<input type="checkbox" class="optionBox"> Always check day transition
</div>
&#13;