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

3

假设我有一些JavaScript代码:

window.onunload=some_jsfunction();

如何在该处理程序中添加另一个功能?类似于这样:
window.onunload=some_jsfunction() + another_jsfunction();

使用 .bind 怎么样?http://api.jquery.com/bind/ - Mr_Spock
抱歉,我忘了提到,使用的是MooTools。 - user603007
请参见http://mootools.net/docs/core/Element/Element.Event#Element:addEvent。 - katspaugh
3个回答

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. */ });

2
我的观点,基于经验:只有在你能够忍受处理浏览器不一致性的情况下才使用addEventListener。这里列出的第二种解决方案是将事件添加在一起的有用方法,但请记住,除非重新分配旧版本,否则无法删除它们。顺便说一句,如果您的事件附加到文档中的特定元素,则可以使用node.setAttribute("onClick",node.getAttribute("onClick")+newcode); - Niet the Dark Absol

3

window.onunload 上调用一个函数,然后在该函数中调用您的函数。就像这样:

window.onunload = callFunctions;

当你的 callFunctions 看起来像这样

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

1

jQuery库使用一种事件监听器的方法,将文档准备好的函数放入回调列表中,当准备好事件被触发时,这些函数会被调用。对于您的问题,可以像这样实现:

    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这样的框架,因为它内置了这种机制。而你不编写的代码就不必维护。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接