摘要:假設我們有這樣的一段我們想要實現一個效果,點擊的時候,彈出此內的文字。我們采用代理的方式,利用時間的冒泡把事件綁定到上,而不是每一個上面
我們知道,在主流的瀏覽器里面綁定事件處理程序和解綁分別是:
綁定:addEventListener(eventType, handler, useCapture); 解綁:removeEventListener(eventType, handler, useCapture); eventType: 事件的名字,string類型,例如‘click’ handler: 事件處理程序,function類型 useCapture: 如果為true, handler在事件捕獲階段執行 如果為false, handler在事件冒泡階段執行
然而IE9之前,IE的事件處理程序是不一樣,首先看看它的兩個方法:
綁定:attachEvent(eventNameWithOn, handler) 解綁:detachEvent(eventNameWithOn, handler) eventNameWithOn: 事件的名字,并且前面有‘on’ handler: 事件處理程序
IE的事件處理程序除了從方法名字的不同,還有其他的一些不同,來做一個總結:
1: 參數不同 IE版本沒有useCapture這個參數,因為IE只支持冒泡,所以也沒必要給出這個參數了。也可以理解為在attachEvent()和detachEvent()內useCapture為false. 2: this不同 在非IE的其他瀏覽器中,我們傳遞給事件處理程序(handler)的this是事件目標元素(也就是我們的target);但是,IE的this卻是Window 3: Event對象不同 在非IE的其他瀏覽器中,我們會把Event對象傳給我們的事件處理程序(handler),但是IE卻沒有,而是作為一個屬性綁定在了Window上 4: 在非IE的其他瀏覽器中和IE的Event實例中的內容是不一樣的 1: 事件源: target -> srcElement(IE) 2: 阻止瀏覽器默認行為:preventDefault -> returnValue = false(IE) 3: 阻止事件冒泡: stopPropagation -> cancelBubble = true 其實還有很多的不同,以上三點算是比較重要又普遍的
所以如果我們要實現一個跨瀏覽器的事件代理,就要處理IE的那些不同。假設我們有這樣的一段HTML:
我們想要實現一個效果,點擊"
var bookList = document.getElementsByClassName("bookList")[0]; if(document.addEventListener){ bookList.addEventListener("click", function(event){ var target = getTarget(event); if(target.nodeName === "LI"){ alert(target.innerHTML); } }) } if(document.attachEvent){ bookList.attachEvent("click", function(event){ var target = getTarget(event); if(target.nodeName === "LI"){ alert(target.innerHTML); } }) } function getTarget(event){ var event = event || window.event; var target = event.target || event.srcElement; return target; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83658.html
摘要:跨文檔消息傳送,有時候也簡稱為,指的是來自不同域的頁面間傳遞消息。接收到消息時,會觸發對象的事件。接受到消息后驗證發送窗口的來源是至關重要的。基本的檢測模式如下。 跨文檔消息傳送(cross-document messaging),有時候也簡稱為XDM,指的是來自不同域的頁面間傳遞消息。例如,www.wrox.com域中的一個頁面與一個位于內嵌框架中的p2p.wrox.com域中的頁面...
摘要:與其它模式的異同適配器模式不會改變原有接口,這一點與裝飾者模式和代理模式類似。代理模式適配器模式與代理模式最相似,同樣都是創建一個新對象包裝一次,實現對本體的調用。外觀模式外觀模式與適配器模式最大的區別,是定義了一個新的接口。 showImg(https://segmentfault.com/img/bVbul8d?w=800&h=600); 適配器模式:將一個類(對象)的接口(方法或...
閱讀 2096·2021-11-23 09:51
閱讀 2839·2021-11-22 15:35
閱讀 2937·2019-08-30 15:53
閱讀 1038·2019-08-30 14:04
閱讀 3276·2019-08-29 12:39
閱讀 1802·2019-08-28 17:57
閱讀 1086·2019-08-26 13:39
閱讀 551·2019-08-26 13:34