Javascript Event事件中IE與標(biāo)準(zhǔn)DOM的比較
更新時(shí)間:2010年04月23日 17:36:57 作者:
說是IE與DOM的比較,其實(shí)還是瀏覽器之間的比較,眾多的瀏覽器中,IE獨(dú)樹一幟,并且占有大部分用戶市場(chǎng),后來的標(biāo)準(zhǔn)DOM雖然不少優(yōu)點(diǎn)之處,但畢竟一般用戶不關(guān)心也不知道這些,代碼編寫過程中,往往需要兼顧多個(gè)瀏覽器。
1.事件流的區(qū)別
IE采用冒泡型事件 Netscape使用捕獲型事件 DOM使用先捕獲后冒泡型事件
示例:
<body>
<div>
<button>點(diǎn)擊這里</button>
</div>
</body>
冒泡型事件模型: button->div->body (IE事件流)
捕獲型事件模型: body->div->button (Netscape事件流)
DOM事件模型: body->div->button->button->div->body (先捕獲后冒泡)
2.事件偵聽函數(shù)的區(qū)別
IE使用:
[Object].attachEvent("name_of_event_handler", fnHandler); //綁定函數(shù)
[Object].detachEvent("name_of_event_handler", fnHandler); //移除綁定
DOM使用:
[Object].addEventListener("name_of_event", fnHandler, bCapture); //綁定函數(shù)
[Object].removeEventListener("name_of_event", fnHandler, bCapture); //移除綁定
bCapture參數(shù)用于設(shè)置事件綁定的階段,true為捕獲階段,false為冒泡階段。
示例代碼:
function addEventHandler(object,eventType,fnHandler){
if(object.addEventListener){ //DOM
object.addEventListener(eventType, fnHandler, false);
}else if(object.attachEvent){ //IE
object.attachEvent("on"+eventType, fnHandler);
}else{ //others
object["on"+eventType]=fnHandler;
}
}
function removeEventHandler(object,eventType,fnHandler){
if(object.removeEventListener){ //DOM
object.removeEventListener(eventType, fnHandler, false);
}else if(object.detachEvent){ //IE
object.detachEvent("on"+eventType, fnHandler);
}else{ //others
object["on"+eventType]=null;
}
}
addEventHandler(oDiv,"click",function(){alert("clicked")});
3.事件對(duì)象定位(獲取)
IE:事件對(duì)象是window對(duì)象的一個(gè)屬性event,event只能在事件發(fā)生時(shí)訪問,事件處理函數(shù)執(zhí)行完畢,事件對(duì)象被銷毀。
示例:
document.onclick=function(){
alert(window.event.type);
}
DOM:event對(duì)象必須作為唯一的參數(shù)傳遞給事件處理函數(shù),且必須為第一個(gè)參數(shù)。
示例:
document.onclick=function(){
alert(arguments[0].type);
}
4.獲取目標(biāo)(target)
IE:var oTarget=oEvent.srcElement;
DOM:var oTarget=oEvent.target;
5.阻止事件默認(rèn)行為
IE:oEvent.returnValue=false;
DOM:oEvent.preventDefault();
示例:
//屏蔽網(wǎng)頁右鍵菜單
document.body.oncontextmenu=function(oEvent){
if(document.all){
oEvent=window.event;
oEvent.returnValue=false;
}else{
oEvent.preventDefault();
}
}
6.停止事件復(fù)制(冒泡)
IE:oEvent.cancelBubble=true;
DOM:oEvent.stopPropagation();
示例:
button.onclick=function(oEvent){
if(document.all){
oEvent=window.event;
oEvent.cancelBubble=true;
}else{
oEvent.stopPropagation();
}
}
附一個(gè)代碼測(cè)試窗口:(感覺有些時(shí)候這種方式比alert()還好用)
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
IE采用冒泡型事件 Netscape使用捕獲型事件 DOM使用先捕獲后冒泡型事件
示例:
復(fù)制代碼 代碼如下:
<body>
<div>
<button>點(diǎn)擊這里</button>
</div>
</body>
冒泡型事件模型: button->div->body (IE事件流)
捕獲型事件模型: body->div->button (Netscape事件流)
DOM事件模型: body->div->button->button->div->body (先捕獲后冒泡)
2.事件偵聽函數(shù)的區(qū)別
IE使用:
[Object].attachEvent("name_of_event_handler", fnHandler); //綁定函數(shù)
[Object].detachEvent("name_of_event_handler", fnHandler); //移除綁定
DOM使用:
[Object].addEventListener("name_of_event", fnHandler, bCapture); //綁定函數(shù)
[Object].removeEventListener("name_of_event", fnHandler, bCapture); //移除綁定
bCapture參數(shù)用于設(shè)置事件綁定的階段,true為捕獲階段,false為冒泡階段。
示例代碼:
復(fù)制代碼 代碼如下:
function addEventHandler(object,eventType,fnHandler){
if(object.addEventListener){ //DOM
object.addEventListener(eventType, fnHandler, false);
}else if(object.attachEvent){ //IE
object.attachEvent("on"+eventType, fnHandler);
}else{ //others
object["on"+eventType]=fnHandler;
}
}
function removeEventHandler(object,eventType,fnHandler){
if(object.removeEventListener){ //DOM
object.removeEventListener(eventType, fnHandler, false);
}else if(object.detachEvent){ //IE
object.detachEvent("on"+eventType, fnHandler);
}else{ //others
object["on"+eventType]=null;
}
}
addEventHandler(oDiv,"click",function(){alert("clicked")});
3.事件對(duì)象定位(獲取)
IE:事件對(duì)象是window對(duì)象的一個(gè)屬性event,event只能在事件發(fā)生時(shí)訪問,事件處理函數(shù)執(zhí)行完畢,事件對(duì)象被銷毀。
示例:
復(fù)制代碼 代碼如下:
document.onclick=function(){
alert(window.event.type);
}
DOM:event對(duì)象必須作為唯一的參數(shù)傳遞給事件處理函數(shù),且必須為第一個(gè)參數(shù)。
示例:
復(fù)制代碼 代碼如下:
document.onclick=function(){
alert(arguments[0].type);
}
4.獲取目標(biāo)(target)
IE:var oTarget=oEvent.srcElement;
DOM:var oTarget=oEvent.target;
5.阻止事件默認(rèn)行為
IE:oEvent.returnValue=false;
DOM:oEvent.preventDefault();
示例:
復(fù)制代碼 代碼如下:
//屏蔽網(wǎng)頁右鍵菜單
document.body.oncontextmenu=function(oEvent){
if(document.all){
oEvent=window.event;
oEvent.returnValue=false;
}else{
oEvent.preventDefault();
}
}
6.停止事件復(fù)制(冒泡)
IE:oEvent.cancelBubble=true;
DOM:oEvent.stopPropagation();
示例:
復(fù)制代碼 代碼如下:
button.onclick=function(oEvent){
if(document.all){
oEvent=window.event;
oEvent.cancelBubble=true;
}else{
oEvent.stopPropagation();
}
}
附一個(gè)代碼測(cè)試窗口:(感覺有些時(shí)候這種方式比alert()還好用)
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
您可能感興趣的文章:
- JS中dom0級(jí)事件和dom2級(jí)事件的區(qū)別介紹
- 一些主流JS框架中DOMReady事件的實(shí)現(xiàn)小結(jié)
- JavaScript DOM 添加事件
- javascript 刪除dom對(duì)象的事件函數(shù)代碼
- DOM3中的js textInput文本事件
- JS、CSS以及img對(duì)DOMContentLoaded事件的影響
- Javascript封裝DOMContentLoaded事件實(shí)例
- JavaScript DOM事件(筆記)
- 關(guān)于javascript DOM事件模型的兩件事
- js學(xué)習(xí)總結(jié)之dom2級(jí)事件基礎(chǔ)知識(shí)詳解
相關(guān)文章
firefox firebug中文入門教程 腳本之家新年特別版
最近看了一篇文章感觸頗深,對(duì)于firebug作為腳本之家的編輯經(jīng)??吹牡?,但可悲的是沒怎么用過,不是不用那個(gè)而是不會(huì)用,剛好看了一篇基礎(chǔ)的文章特別整理下。2010-01-01js實(shí)現(xiàn)城市級(jí)聯(lián)菜單的2種方法
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)城市級(jí)聯(lián)菜單的2種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06關(guān)于JS數(shù)組追加數(shù)組采用push.apply的問題
JS數(shù)組追加數(shù)組沒有現(xiàn)成的函數(shù),這么多年我已經(jīng)習(xí)慣了a.push.apply(a, b);這種自以為很酷的,不需要寫for循環(huán)的寫法,一直也沒遇到什么問題,直到今天我要append的b是個(gè)很大的數(shù)組時(shí)才遇到了坑。2014-06-06深入解析ECMAScript?2023?中的新數(shù)組方法
ECMAScript?是一種標(biāo)準(zhǔn)化的腳本語言,它是?JavaScript?的規(guī)范。ECMAScript?2023?是?JavaScript?編程語言的更新,旨在帶來改進(jìn)并使?JavaScript?程序可預(yù)測(cè)和可維護(hù),這篇文章主要介紹了探索?ECMAScript?2023?中的新數(shù)組方法,需要的朋友可以參考下2023-12-12JavaScript requestAnimationFrame動(dòng)畫詳解
這篇文章主要為大家詳細(xì)介紹了JavaScript requestAnimationFrame動(dòng)畫,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09js重寫alert事件(避免alert彈框標(biāo)題出現(xiàn)網(wǎng)址)
這篇文章主要給大家介紹了關(guān)于js重寫alert事件的相關(guān)資料,這樣可以避免alert彈框標(biāo)題出現(xiàn)網(wǎng)址的情況,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12通過滑動(dòng)翻頁效果實(shí)現(xiàn)和移動(dòng)端click事件問題
這篇文章主要介紹了滑動(dòng)翻頁效果實(shí)現(xiàn)和移動(dòng)端click事件問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01JavaScript類型系統(tǒng)之正則表達(dá)式
正則又叫規(guī)則或模式,是一個(gè)強(qiáng)大的字符串匹配工具。javascript通過RegExp類型來支持正則表達(dá)式,本文給大家介紹javascript類型系統(tǒng)之正則表達(dá)式,對(duì)js正則表達(dá)式相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-01-01