沒有彈出框
<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>
注意順序:先彈出“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是先綁定的先執行.