如何克服被覆盖的事件处理程序? 我有一个剧本说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?
思考和参考将有所帮助
答案 0 :(得分:19)
您应该使用addEventListener()为同一事件提供各种处理程序
window.addEventListener("load", yourfunction, false);
答案 1 :(得分:8)
在低级IE版本中使用element.addEventListener
或window.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库(如jQuery
和MooTools
)都有自己的实现。我建议利用他们的API - 因为他们抽象出不同的浏览器实现并经过全面测试。
答案 2 :(得分:-1)
是的,第二个语句将覆盖第一个语句。因为您使用传统的注册模型,所以任何给定的事件和对象只允许一个事件句柄。功能分配不是累积的。 但你可以:
window.onload = function () {handlerinb(); handlerina()}