所以,我有一个for循环和一个数组。在该数组中的每个元素都是按钮,我希望它们都有onmouseover
个事件。
注意:代码已简化,以表达我的观点。
for(i = 0; i < array.length; i++){
var button = document.createElement("button");
button.onmouseover = function() {doSomething(i)};
}
其中doSomething
接受一个参数i
。
当光标悬停在任何一个butttons上时,提供给doSomething
- i
的参数始终是array
的长度,无论光标悬停在哪个按钮上。为什么会发生这种情况,我该怎么做才能确保为函数提供正确的参数?
答案 0 :(得分:0)
您绑定到变量,而不是其值。即您已成功创建一个闭包,其中所有函数都使用相同的变量i
,而不是值为i
的新变量。
您需要做的是锁定该值,您可以这样做的一种方法是创建一个函数生成器并使用当前值i
调用它。 E.g。
for(i = 0; i < array.length; i++){
var button = document.createElement("button");
button.onmouseover = function(inner_i) { return function(){doSomething(inner_i)} }(i);
}