2012-03-05 173 views
15

如何克服被覆蓋的事件處理程序? 我有一個腳本說a.js防止window.onload被覆蓋javascript

window.onload = function() { 
    //Handler in a.js 
} 

另一個腳本說b.js

window.onload = function() { 
    //Handler in b.js 
} 

其中,

a.js是一種第三方庫由我

b.js是使用我的腳本的出版商[我不能在這裏做任何更改]

b.js中的onload處理程序會覆蓋a.js的處理程序嗎?

如果是,如何防止這種情況發生?

將在a.js中構建一個所有事件處理程序的隊列,並將它們提供給事件幫助?

但a.js會知道所有事件處理程序的事件直到b.js被加載嗎?

思想和參考資料有助於

回答

8

使用element.addEventListenerwindow.attachEvent在低級別的IE版本。

樣品addEvent方法:

function addEvent(node, type, listener) { 
    if (node.addEventListener) { 
     node.addEventListener(type, listener, false); 
     return true; 
    } else if (node.attachEvent) { 
     node['e' + type + listener] = listener; 
     node[type + listener] = function() { 
      node['e' + type + listener](window.event); 
     } 
     node.attachEvent('on' + type, node[type + listener]); 
     return true; 
    } 
    return false; 
}; 

注意 - 大多數情況下,如果不是全部,像jQueryMooTools現代JavaScript庫都有自己的實現。我建議利用他們的API - 因爲他們抽象出不同的瀏覽器實現並且經過了徹底的測試。

+0

爲什麼我們需要node ['e'+ type + listener]?不會node.attachEvent('on'+ type,listener)工作嗎? – Tamil 2012-03-06 07:41:01

16

你應該使用addEventListener()有不同的處理程序爲同一事件

window.addEventListener("load", yourfunction, false); 
-1

是,第二條語句將覆蓋第一個。因爲您正在使用傳統的註冊模型,所以只有一個事件句柄可以用於任何給定的事件和對象。功能分配不是累積的。 但您可以:

window.onload = function() {handlerinb(); handlerina()}