簡體   English   中英

如何向window.onunload添加更多功能?

[英]how to add more functions to window.onunload?

假設我有一些javascript說:

window.onunload=some_jsfunction();

如何向此處理程序添加其他函數? 這樣的事情:

window.onunload=some_jsfunction() + another_jsfunction();

第一個也是最重要的方式: 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. */ });

window.onunload上調用一個函數並在該函數中調用你的函數。 有點像這樣

window.onunload = callFunctions;

雖然你的callFunction看起來像

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

jQuery庫使用方法事件監聽器將文檔就緒函數放入回調列表中,並在觸發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,因為它內置了這樣的機制。而你編寫的代碼則不需要維護。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM