我想在我的菜单中为某些链接添加事件监听器,参数i在两种情况下都传递为2,但应该是0和1。似乎无法在这里找到问题。
function setMode(m) {
console.log(m);
var mode = document.querySelectorAll('.mode');
document.querySelector('#modus > a').innerHTML = mode[m].innerHTML;
}
function clickAdd() {
var elements = document.querySelectorAll('#modus div a');
for (var i = 0; i < elements.length; i++) {
elements[i].addEventListener('click', function() {
setMode(i);
});
}
}
<li class="dropdown" id="modus">
<a href="#">Modus</a>
<div class="dropdown-content">
<a href="#" class="mode radio">ExRaid</a>
<a href="#" class="mode radio">Trigger</a>
</div>
</li>
答案 0 :(得分:0)
使用unset TERM
循环声明i
以创建for
的块范围。
i
for (let i = 0; i < elements.length; i++) {
function setMode(m) {
console.log(m);
var mode = document.querySelectorAll('.mode');
document.querySelector('#modus > a').innerHTML = mode[m].innerHTML;
}
function clickAdd() {
var elements = document.querySelectorAll('#modus div a');
for (let i = 0; i < elements.length; i++) {
elements[i].addEventListener('click', function() {
setMode(i);
});
}
}
clickAdd();
OR:您可以使用IIFE(立即调用函数表达式):
<li class="dropdown" id="modus">
<a href="#">Modus</a>
<div class="dropdown-content">
<a href="#" class="mode radio" >ExRaid</a>
<a href="#" class="mode radio" >Trigger</a>
</div>
</li>
function setMode(m) {
console.log(m);
var mode = document.querySelectorAll('.mode');
document.querySelector('#modus > a').innerHTML = mode[m].innerHTML;
}
function clickAdd() {
var elements = document.querySelectorAll('#modus div a');
for (var i = 0; i < elements.length; i++) {
(function(j) {
elements[j].addEventListener('click',function() {
setMode(j);
});
})(i);
}
}
clickAdd();