предотвращение переопределения JavaScript в window.onload - PullRequest
17 голосов
/ 05 марта 2012

Как преодолеть переопределение обработчиков событий? У меня есть сценарий сказать a.js

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

В другом скрипте написано b.js

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

где,

a.js - это некая сторонняя библиотека, созданная мной

b.js - издатель, который использует мой сценарий [я не могу внести никаких изменений здесь]

Будет ли обработчик загрузки в b.js переопределять обработчик a.js?

Если да, как предотвратить это?

Будет ли построена очередь из всех обработчиков событий в a.js и отключена ли их при помощи события?

Но будет ли a.js знать все обработчики событий для авансового события, пока не будет загружен b.js?

Мысли и ссылки помогут

Ответы [ 3 ]

20 голосов
/ 05 марта 2012

вы должны использовать addEventListener () , чтобы иметь различные обработчики для одного и того же события

window.addEventListener("load", yourfunction, false); 
8 голосов
/ 05 марта 2012

Используйте 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 - поскольку они абстрагируются от различных реализаций браузера и были тщательно протестированы.

0 голосов
/ 05 марта 2012

Да, второе утверждение переопределит первое.Поскольку вы используете традиционную модель регистрации, для любого данного события и объекта разрешен только один дескриптор события.Назначение функций не является кумулятивным.Но вы можете:

  window.onload = function () {handlerinb(); handlerina()}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...