Запретить window.onload переопределять javascript
Как преодолеть переопределение обработчиков событий?
У меня есть script say a.js
window.onload = function () {
//Handler in a.js
}
Другой script скажем b.js
window.onload = function () {
//Handler in b.js
}
где <
a.js - это своего рода библиотека сторонних разработчиков, созданная мной
b.js - издатель, который использует мой script [я не могу здесь делать никаких изменений]
Будет ли обработчик onload в b.js переопределить обработчик a.js?
Если да, как предотвратить это?
Будет ли создавать очередь всех обработчиков событий в a.js и декаковать их при помощи справки?
Но будет ли a.js знать все обработчики событий для события до начала загрузки b.js?
Мысли и ссылки помогли бы
Ответы
Ответ 1
Используйте element.addEventListener
или window.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;
};
Примечание. Большинство, если не все, современных библиотек JavaScript, таких как jQuery
и MooTools
, имеют свои собственные реализации. Я рекомендую использовать их API, поскольку они абстрагируются от различных реализаций браузера и тщательно протестированы.
Ответ 2
вы должны использовать addEventListener(), чтобы иметь различные обработчики для одного и того же события
window.addEventListener("load", yourfunction, false);
Ответ 3
Да, второй оператор будет переопределять первый. Поскольку вы используете традиционную модель регистрации, для любого заданного события и объекта разрешен только один дескриптор события. Назначение функции не является совокупным.
Но вы можете:
window.onload = function () {handlerinb(); handlerina()}