Javascript Event事件中IE與標準DOM的比較

來源:互聯網
上載者:User

1.事件流的區別

IE採用冒泡型事件 Netscape使用捕獲型事件 DOM使用先捕獲後冒泡型事件
樣本: 複製代碼 代碼如下:<body>
<div>
<button>點擊這裡</button>
</div>
</body>

冒泡型事件模型: button->div->body (IE事件流)

捕獲型事件模型: body->div->button (Netscape事件流)

DOM事件模型: body->div->button->button->div->body (先捕獲後冒泡)

2.事件偵聽函數的區別

IE使用:
[Object].attachEvent("name_of_event_handler", fnHandler); //綁定函數
[Object].detachEvent("name_of_event_handler", fnHandler); //移除綁定

DOM使用:
[Object].addEventListener("name_of_event", fnHandler, bCapture); //綁定函數
[Object].removeEventListener("name_of_event", fnHandler, bCapture); //移除綁定

bCapture參數用於設定事件綁定的階段,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.事件對象定位(擷取)

IE:事件對象是window對象的一個屬性event,event只能在事件發生時訪問,事件處理函數執行完畢,事件對象被銷毀。

樣本: 複製代碼 代碼如下:document.onclick=function(){
alert(window.event.type);
}

DOM:event對象必須作為唯一的參數傳遞給事件處理函數,且必須為第一個參數。

樣本: 複製代碼 代碼如下:document.onclick=function(){
alert(arguments[0].type);
}

4.擷取目標(target)
IE:var oTarget=oEvent.srcElement;
DOM:var oTarget=oEvent.target;

5.阻止事件預設行為

IE:oEvent.returnValue=false;
DOM:oEvent.preventDefault();

樣本: 複製代碼 代碼如下://屏蔽網頁右鍵菜單
document.body.oncontextmenu=function(oEvent){
if(document.all){
oEvent=window.event;
oEvent.returnValue=false;
}else{
oEvent.preventDefault();
}
}

6.停止事件複製(冒泡)
IE:oEvent.cancelBubble=true;
DOM:oEvent.stopPropagation();

樣本:

複製代碼 代碼如下:button.onclick=function(oEvent){
if(document.all){
oEvent=window.event;
oEvent.cancelBubble=true;
}else{
oEvent.stopPropagation();
}
}

附一個代碼測試視窗:(感覺有些時候這種方式比alert()還好用) xmlns="http://www.w3.org/1999/xhtml">


Mouse Here

Clear

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.