我实际上要做的是使用按钮生成容器,这些按钮具有相同的处理程序但是获得不同的参数:
<div id="container">
<button onclick="onclick_handler(1)">1</button>
<button onclick="onclick_handler(2)">2</button>
<button onclick="onclick_handler(3)">3</button>
</div>
使用此:
function onload_handler() {
var container = document.getElementById("container");
var i;
for (i = 0; i < 3; i++) {
var button = document.createElement('button');
button.innerHTML = i;
button.addEventListener('click', function() {
onclick_handler(i);
});
container.appendChild(button);
}
}
function onclik_handler(val) {
console.log(val);
}
当我点击按钮时,我在控制台中得到4。我做错了什么?
是否可以在不使用匿名函数的情况下完成?
答案 0 :(得分:3)
尝试通过每次迭代创建一个范围
来解决闭包创建的问题function(i){
button.addEventListener('click', function() {
onclick_handler(i);
});
})(i);
您的完整代码将是,
function onload_handler() {
var container = document.getElementById("container");
var i;
for (i = 0; i < 3; i++) {
var button = document.createElement('button');
button.innerHTML = i;
(function(i){
button.addEventListener('click', function() {
onclick_handler(i);
});
})(i)
container.appendChild(button);
}
}
function onclik_handler(val) {
console.log(val);
}