跨瀏覽器的事件對象介紹
更新時間:2012年06月27日 10:36:58 作者:
雖然IE的事件對象與DOM的事件對象存在差異,但是IE事件對象中所包含的信息和能力,與DOM事件對象是相同的,只是表現(xiàn)形式不同而已,通過映射的方式,我們可以實現(xiàn)兼容IE和DOM事件對象的事件對象
復(fù)制代碼 代碼如下:
var eventUtil = {
getEvent : function(event){
return event ? event : window.event;
};
getTarget : function(event){
return event.target || event.srcElement;
};
preventDefault : function(event){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false;
}
};
stopPropagation : function(event){
if(event.stopPropagation){
event.stopPropagation();
}else{
event.cancelBubble = true;
}
};
};
當(dāng)使用一個DOM兼容的瀏覽器時,event 變量僅僅是傳入并被返回,在IE中event參數(shù)將是undefined ,因此window.event將會被返回,所以采用eventUtil.getEvent()方法無論在dom還是IE上event返回值都是可用的。
同理第二個方法,getTarge()方法,先檢測event對象的target屬性,如果存在,則返回targe,若為IE瀏覽器則返回srcElement屬性。保證兼容性。
復(fù)制代碼 代碼如下:
btn.onclick = function(event){
event = EventUtil.getEvent(event);
var target = EventUtil.getTarget(event);
};
第三個方法,preventDefault ()方法,當(dāng)event對象傳入時,先檢測event對象的preventDefault()方法是否可用,若可用則調(diào)用preventDefault方法,若不可用將event的returnValue 設(shè)置為false。
例如:
復(fù)制代碼 代碼如下:
var link = document.getElementById("myLink");
link.onclick = function(event){
event = EventUtil.getEvent(event);
EventUtil.preventDefault(event);
};
這段代碼阻止了一個link標(biāo)簽的默認行為,event對象來自于EventUtil的getEvent方法的返回值 并作為preventDefault()方法的傳入?yún)?shù)。
第四個方法stopPropagation(),用同樣的方法,首先嘗試DOM方法,之后嘗試cancelBubble屬性,例如下面的代碼:
復(fù)制代碼 代碼如下:
var btn = document.getElementById("myBtn");
btn.onclick = function(event){
alert("Clicked");
event = EventUtil.getEvent(event);
EventUtil.stopPropagation(event);
};
document.body.onclick = function(event){
alert("Body clicked");
};
記得這個方法可能阻止事件在瀏覽器的冒泡階段 或者 同時阻止事件在瀏覽器的冒泡和捕獲階段。
相關(guān)文章
微信小程序?qū)崿F(xiàn)圖片選擇并預(yù)覽功能
這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)圖片選擇并預(yù)覽,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07談?wù)凧avaScript中super(props)的重要性
今天小編就為大家分享一篇關(guān)于談?wù)凧avaScript中super(props)的重要性,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02微信小程序scroll-view實現(xiàn)左右聯(lián)動
這篇文章主要為大家詳細介紹了微信小程序scroll-view實現(xiàn)左右聯(lián)動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09JavaScript字符串轉(zhuǎn)數(shù)字的5種方法及遇到的坑
JavaScript是一個神奇的語言,字符串轉(zhuǎn)數(shù)字有5種方法,各有各的坑法!接下來通過本文給大家介紹JavaScript字符串轉(zhuǎn)數(shù)字的5種方法及其陷阱,感興趣的朋友一起看看吧2018-07-07layui 彈出層回調(diào)獲取彈出層數(shù)據(jù)的例子
今天小編就為大家分享一篇layui 彈出層回調(diào)獲取彈出層數(shù)據(jù)的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09ES6中Set和Map數(shù)據(jù)結(jié)構(gòu),Map與其它數(shù)據(jù)結(jié)構(gòu)互相轉(zhuǎn)換操作實例詳解
這篇文章主要介紹了ES6中Set和Map數(shù)據(jù)結(jié)構(gòu),Map與其它數(shù)據(jù)結(jié)構(gòu)互相轉(zhuǎn)換操作,結(jié)合實例形式詳細分析了ES6中的Set和Map數(shù)據(jù)結(jié)構(gòu)的概念、原理、遍歷、去重等操作,以及Map與其它數(shù)據(jù)結(jié)構(gòu)互相轉(zhuǎn)換操作,需要的朋友可以參考下2019-02-02