addEventListener的javascript未正确分配

addEventListener的javascript未正确分配,javascript,addeventlistener,Javascript,Addeventlistener,当我单击页面上的任何选择时,函数告诉我的唯一一件事是它正在使用最后一个选择 假设我的页面上有6个选择,我首先为它们分配一个addEventListener,将id作为一个参数传递给它们,然后在更改其中任何一个时,我希望警报会显示“OK+我选择的选择”,但我得到的总是“OK gubeSelect6” 为什么当我选择1-5时,它没有显示正确的内容?我的addEventListener错误吗 多谢各位 function resetValues(ddl) { alert("OK " + ddl)

当我单击页面上的任何选择时,函数告诉我的唯一一件事是它正在使用最后一个选择

假设我的页面上有6个选择,我首先为它们分配一个
addEventListener
,将id作为一个参数传递给它们,然后在更改其中任何一个时,我希望警报会显示“OK+我选择的选择”,但我得到的总是“OK gubeSelect6”

为什么当我选择1-5时,它没有显示正确的内容?我的
addEventListener
错误吗

多谢各位

function resetValues(ddl) {
    alert("OK " + ddl);
}

var selects = document.getElementsByName('gubeSelect');
var sel;

console.log(selects);

for(var z = 0; z < selects.length; z++){
    console.log(z + " " + selects[z].id + " " + selects[z].name);
    sel = selects[z];
    document.getElementById(sel.id).addEventListener("change", function () {
        resetValues(sel.id);
    });
}
函数重置值(ddl){
警报(“正常”+ddl);
}
var selects=document.getElementsByName('gubeSelect');
var-sel;
console.log(选择);
对于(var z=0;z
试试这个:

document.getElementById(sel.id).addEventListener("change", function () {
        resetValues(this.id);
    });
事件发生时,sel.id将始终为6。
您需要对添加了侦听器的元素进行寻址。

尝试使用
resetValues(this.id)而不是
重置值(sel.id)


我认为当你调用
resetValues(sel.id)此处
sel
变量正在向函数发送引用。当您更改
sel
的值时,它将更改先前
sel
s

的所有值,因为它是这样的,这个答案不能解释实际问题,也不能解释为什么这会起作用。这让您满意吗?我习惯于在运行时对变量进行排序,事实并非如此,所以我的想法是addEvent会向匿名函数添加一个字符串,这显然不是正在发生的事情。我仍然在学习javascript,所以这对我来说是新的。是的,我可以看到它是如何重复的,但是搜索stackoverflow没有给我答案,主要是因为使用的术语。我从未想过在循环中寻找javascript闭包。谢谢,这是一篇非常有用的文章,我会在以后再参考。我只给用户733421提供了解决方案,因为他是第一个,但是你的解释很有帮助。