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

时间:2011-10-31 05:49:39

标签: javascript

假设我有一些javascript说:

window.onunload=some_jsfunction();

如何向此处理程序添加其他函数?像这样的东西:

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

3 个答案:

答案 0 :(得分:4)

首要的方式: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 :(得分:3)

window.onunload上调用一个函数并在该函数中调用您的函数。像这样的事情

window.onunload = callFunctions;

虽然你的callFunction看起来像

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

答案 2 :(得分:1)

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,因为它内置了这样的机制。你写的代码不需要维护。