javascript看qq中多事件綁定的執行順序
事件綁定的執行次序
在W3C的標準下,事件綁定使用的是addEventLisenter。
但微軟這家伙經常不按常理出牌。它提供的事件綁定方法是attachEvent。
關于attachEvent的種種不足,先不一一列舉?;蛟S我們已經忍受著用attachEvent來綁定事件。 //object.attachEvent(event, function);
el.attachEvent('onclick', method);
但當在同一元素上綁定多次,你就會知道,微軟的這個私人的方法又是多么“不可理喻”。 el.attachEvent("onclick", method1);
el.attachEvent("onclick", method2);
el.attachEvent("onclick", method3);
el.attachEvent("onclick", method4);
在各個IE下運行,點擊el后,各個方法的執行次序是:
IE6/IE7: method2 -> method4 -> method3 -> method1
IE8: method4 -> method3 -> method2 -> method1
IE9: method1 -> method2 -> method3 -> method4
IE6/7是一種看不出規律的隨機執行,IE8是逆序執行,IE9是順序執行。
無論常識還是W3C標準,這種同一個事件綁定了多個方法的情況,方法的執行次序都應該是先綁定先執行。從IE6-IE9的演變,可以看得出微軟還是有在不斷改進的。但畢竟各個版本的IE存在,使得我們不得不注意綁定在同一事件上的多個方法之間不要有順序依賴。
YUI2的事件綁定并沒有對執行次序做兼容,如果有些場景的確需要綁定多個方法且方法間需要順序執行。那我們就只能自己實現了,大致思路是:在先判斷綁定的el對象上是否已經同一個事件類型的handlers,如果有則不會重復綁定而是把該對象的handler合并到handlers中成為一個方法,相當于這樣function c(){ a(); b();},按照順序的壓入方法實現在IE下不會出現綁定多個方法時能順序執行。 functionaddEvent(el, type, handler){
if(el.attachEvent){// IE
// 為元素的事件類型創建一個哈希表
el._events=el._events||{};
if(!handler){return;}
// 取得事件處理函數的數組的引用
var handlers =el._events[type];
if(handlers){
if(typeofhandler._index==='undefined'||
handlers[handler._index]!== handler){
// 將事件處理函數存入數組
你可能喜歡
- 執行jar文件myeclipse
- javascript加載順序
- javascript省市級聯
- javascript學習筆記
- javascript規范
- javascript彈出框
- javascript經典代碼
- Myeclipse生成可執行的jar文件的方法2頁
- 15分鐘學會MyEclipse導出jar文件再裝換成exe執行文2頁
- MyEclipse中jar包管理技巧-項目配置文檔4頁
- 15分鐘學會MyEclipse導出jar文件再裝換成exe執行文2頁
- MyEclipse導出jar文件3頁
- MyEclipse打包jar文件5頁
- JavaScript原程序選擇左右添加刪除內容菜單2頁
- javascript延遲加載2頁
- Javascript在頁面加載時的執行順序4頁
- JavaScript加載順序的問題1頁
- 為JavaScript程序添加客戶端不可見的注釋1頁
- Javascript文件加載3頁
- javascript---省市級聯下拉框2頁
- Concatenation of Graphs7頁
- JavaScript獲取中國各個省市、城市3頁
- 省份城市聯動菜單 Javascript4頁
- javascript實現的省市級聯功能2頁
- 使用javascript解析xml實現省市縣三級聯動5頁
- javascript學習筆記18頁
- javascript學習筆記6頁
- javascript學習筆記5 HTML DOM RegExp 瀏覽器檢測 cookie11頁
- javascript學習筆記4數組邏輯算數對象5頁
- javascript學習筆記講解版58頁
- Java、數據結構、javascript學習筆記(2013年10月)--持續更新中。。。27頁
- javascript開發規范要求(圖文)1頁
- javascript編程規范-修訂版12頁
- javascript編程規范11頁
- javascript編碼規范9頁
- javascript編程規范15頁
- C#、html、javascript相關規范46頁
- javascript實現兩個信息框彈出效果代碼19頁
- javascript彈出各種對話框2頁
- javascript網頁模擬彈出框7頁
- jQuery和javascript控制懸浮菜單并彈出對應可拖動的資料框3頁
- 04_JavaScript_復選框全選_彈出窗口16頁
- JavaScript 彈出框和寫入文檔11頁
- JavaScript 經典代碼大全21頁
- javascript經典代碼大全20頁
- 經典javaScript代碼25頁
- javascript經典代碼大全20頁
- 經典javaScript代碼28頁
- 經典javaScript代碼13頁