<script language="javascript" type="text/javascript"> function start(){ var nid=document.getElementsByTagName("li"); nid.onclick=function(){alert("4");} } window.onload=start; </script>
这样才有弹出对话框
<script language="javascript" type="text/javascript"> function start(){ var nid=document.getElementsByTagName("li"); nid.onclick=(function(){alert("4");})() } window.onload=start; </script>
运行后,不论点击哪一个li,都是alert提示“4”。
这就是一个需要注意的地方:
闭包允许内层函数引用父函数中的变量,但是该变量是最终值。闭包引用的变量i,是循环结束后的值
<script language="javascript" type="text/javascript"> var li=document.getElementsByTagName("li"); for(var i=0;i<li.length;i++){ li[i].onclick=function(){alert(i);} } </script>
用闭包来解决
<script language="javascript" type="text/javascript">
var li=document.getElementsByTagName("li");
for(var i=0;i<li.length;i++){
(function(index){
li[index].onclick=function(){alert(index);}
})(i);
}
</script>
var li=document.getElementsByTagName("li");
for(var i=0;i<li.length;i++){
(function(index){
li[index].onclick=function(){alert(index);}
})(i);
}
</script>
注意顺序:先弹出“clicked” 再弹出“also clicked”
<script> var fnClick1 = function(){ alert("clicked"); }; var fnClick2 = function(){ alert("also clicked"); }; var oDiv = document.getElementById("div"); oDiv.attachEvent("onclick",fnClick2); oDiv.attachEvent("onclick",fnClick1); </script>
先弹出“also clicked” 再弹出“clicked”
var oDiv = document.getElementById("div"); oDiv.attachEvent("onclick",fnClick1); oDiv.attachEvent("onclick",fnClick2);
.onclick后面的是最先执行的
attachEvent进去的事件 就DOM的解释是乱续的。
但实际测试时 IE是后绑定的先执行,FF是先绑定的先执行.