как добавить дополнительные функции в window.onunload?

#javascript

#javascript

Вопрос:

предположим, у меня есть некоторый javascript, который говорит:

 window.onunload=some_jsfunction();
 

как я могу добавить другую функцию в этот обработчик? что-то вроде этого:

 window.onunload=some_jsfunction()   another_jsfunction();
 

Комментарии:

1. Как насчет использования .bind? api.jquery.com/bind

2. извините, забыл упомянуть, используя mootools

3. mootools.net/docs/core/Element/Element . Событие #Элемент: addEvent затем.

Ответ №1:

Первый и главный способ: addEventListener :

 window.addEventListener('unload', function () { /* Do things. */ });
window.addEventListener('unload', function () { /* Do other things. */ });
 

Другой способ — тоже создать новый обработчик событий с вызовом из него старого обработчика, а затем перезаписать старый обработчик. Я могу представить ситуацию, когда это может быть полезно, но не с событиями DOM:

 var onUnload = function () {
    /* Do things. */
};

var oldOnUnload = onUnload;

onUnload = function () {
    oldOnUnload();
    /* Do new things. */
};
 

Самый продвинутый способ — создать свой собственный наблюдатель поверх наблюдателя DOM (это то, что фреймворки, такие как Mootools, делают внутренне). Это может быть полезно в долгосрочной перспективе; например, для добавления пространств имен событий.

 var handlers = [];

window.onunload = function () {
    handlers.forEach(function (fn) { fn(); });
};

handlers.push(function () { /* Do things. */ });
handlers.push(function () { /* Do other things. */ });
 

Комментарии:

1. Мое мнение, основанное на опыте: используйте addEventListener только в том случае, если вы можете справиться с несоответствиями браузера. Второе решение, перечисленное здесь, является полезным способом совместного добавления событий, но имейте в виду, что вы не сможете удалить их после, если не переназначите старую версию. В качестве примечания, если ваше событие привязано к определенному элементу в документе, вы можете использовать node.setAttribute("onClick",node.getAttribute("onClick") newcode); .

Ответ №2:

Вызовите функцию window.onunload и вызовите свою функцию в этой функции. Что-то вроде этого

 window.onunload = callFunctions;
 

В то время как ваши callфункции выглядят как

 function callFunctions() {
  someFunction();
  anotherFunction();
}
 

Ответ №3:

Библиотека jQuery использует подход слушатели событий для функции document ready помещаются в список обратного вызова, и функции вызываются при запуске события ready. Для вашей проблемы это может быть реализовано как-то так

     onunloadList = new Array();
    function addOnUnloadHandler( fn ) {
      // Add the callback
      onunloadList.push( fn );
    }

    function handleOnUnloadHandlers( fn ) {
      for (i=0;i<onunloadList.length;i  ) {
        var fn = onunloadList[i];
        fn();
      }
    }

    window.onunload = handleOnUnloadHandlers();
 

В общем, я бы рекомендовал использовать какой-то фреймворк, такой как jQuery, потому что в него встроен такой механизм. И код, который вы не пишете, вам не нужно поддерживать.