<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<body>
<button class="button">1</button>
<button class="button">2</button>
<button class="button">3</button>
<button class="button">4</button>
<button class="button">5</button>
<button class="button">6</button>
<button class="button">7</button>
<button class="button">8</button>
<button class="button">9</button>
<script type="text/javascript">
var nodes=document.getElementsByTagName("button");
var clickButton=function(nodes){
var i;
for(i=0;i<nodes.length;i++){
nodes[i].οnclick=function(){alert(i);};
}
}
clickButton(nodes);
</script>
</body>
</html>
由于js事件处理器执行时绑定变量i,导致点击任意按钮,都alert出最后的 i值8;而不是函数构造是i的值;
用闭包可解决这个问题,js改为
<script type="text/javascript">
var nodes=document.getElementsByTagName("button");
var clickButton2=function(nodes){
var i;
for(i=0;i<nodes.length;i++){
nodes[i].οnclick=function(){
var e=i;
return function(){alert(e);};
}();
}
};
clickButton2(nodes);
</script>
便可达到预期效果