防止window.onload被覆盖javascript

时间:2012-03-05 14:08:18

标签: javascript javascript-events

如何克服被覆盖的事件处理程序? 我有一个剧本说a.js

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?

思考和参考将有所帮助

3 个答案:

答案 0 :(得分:19)

您应该使用addEventListener()为同一事件提供各种处理程序

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

答案 1 :(得分:8)

在低级IE版本中使用element.addEventListenerwindow.attachEvent

示例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;
};

注意 - 大多数(如果不是全部)现代JavaScript库(如jQueryMooTools)都有自己的实现。我建议利用他们的API - 因为他们抽象出不同的浏览器实现并经过全面测试。

答案 2 :(得分:-1)

是的,第二个语句将覆盖第一个语句。因为您使用传统的注册模型,所以任何给定的事件和对象只允许一个事件句柄。功能分配不是累积的。 但你可以:

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