Possible Duplicate:
Assign click handlers in for loop
我对 javascript 有点天真。我有这个 javascript 代码,应该在单击按钮时运行。按钮是在循环中动态生成的。我期望的是每次单击按钮时都会收到不同的变量。但我收到的始终是数组中的最后一个变量。请参阅下面的代码。有人看出这里有明显的错误吗?
<!doctype html>
<html>
<head>
<script type="text/javascript">
var myCars=["Saab","Volvo","BMW"];
function loadCars() {
var carList = document.getElementById('mydiv');
for(var i=0;i < myCars.length ; i++ ){
//Append button
var el = document.createElement("button");
var car = myCars[i];
el.name = "view_car";
el.id = "view_car";
el.value = "View car";
el.type = "button";
el.title = "View car "+i;
el.innerHTML = "View car "+car;
el.onclick = function() {
showMe(car,i);
};
carList.appendChild(el);
}
}
function showMe(carName,index){
alert("Selected car="+carName +" , index="+index);
}
</script>
</head>
<body onload="loadCars()">
Cars will be loaded here
<div id="mydiv" class="carlist"></div>
</body>
</html>
最佳答案
没有什么明显的错误。但是,您可以在 onclick
函数中使用 car
和 i
。两者都依赖于外部 car
和 i
并进行操作。您必须使用闭包来中断此引用:
el.onclick = (function(carname,index){
return function() {
showMe(carname,index);
};
})(car,i);
关于javascript - Javascript 函数分配给按钮单击的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11826388/