原生js:事件綁定(call,修改this指向)


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指向 有興趣可以看看

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM