js中的事件,一般有兩種寫法:
1、常規:o.onclcik=fn(){}
常規方法比較好理解(一般事件前選用“on...” ie你懂得,其他的也可以兼容)
不過對一個對象進行相同事件處理的時候,容易引發方法覆蓋
var div=document.getElementById("div1");
div.onclick=function(){ alert(1) }
div.onclick=function(){ alert(2) }
div.onclick=function(){ alert(3) }
只彈出3
2、事件綁定:
可以避免常規的方法覆蓋,有利多人協作
在封裝一些方法,需要后期修改“事件”的時候優勢很明顯
好現在聊聊瀏覽器兼容吧,額!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ie: o.attachEvent(ev,fn);(他命的是this指向,默認都是指向window的得call() “靠!”一下)
w3c: o.addEventListener(ev,fn,false);
像我這樣傾向於用原生js的同學們,封裝是務必要做的工作,廢話少說下面直接給方法:
function on(o,ev,fn){ if(o.addEventListener){//ff,webkit o.addEventListener(ev,fn,false); }else if(o.attachEvent){//ie 8- o.attachEvent('on'+ev,function(){//默認指向window fn.call(o,arguments); //改變this指向 }); } }
現在再試試:
on(div,"click",function(){alert(1)})
on(div,"click",function(){alert(2)})
on(div,"click",function(){alert(3)})
w3c:1,2,3
ie:3,2,1
說不上 完美!!! 但是最起碼都有啦
關於事件綁定和ie的this指向,個人感覺這篇文章也是不錯的attachEvent 中this指向 有興趣可以看看