如何覆盖事件并仍然执行旧事件?

时间:2012-11-28 15:03:33

标签: javascript oop events javascript-events

我正在寻找覆盖事件并仍然预先形成它的行动。

意思是这样的事:

var oldOnError = window.onerror;
window.onerror = function(msg, url, line) {
 oldOnError();
};

现在这将被执行但是onerror事件可以接受几个参数,我不知道,也不知道哪些是。

所以:

  • 这有一个简单的解决方案吗?
  • 如果没有,我怎么知道oldOnError期望得到什么参数?

2 个答案:

答案 0 :(得分:1)

为什么不使用addEventListener()

var listener = function(msg, url, line) {
 // your code
};

if (window.addEventListener) {
    window.addEventListener('error', listener, false);
} else if ( window.attachEvent ) { // for versions previous to IE9
    window.attachEvent( 'onerror', listener );
}

这样你就不会覆盖现有的事件监听器。

另外需要注意的是,即使指定了3个参数,您的函数在调用时也会传递一个事件对象。所以你的功能应该定义如下。

var listener = function( event ) {
    // your code
}

有关详细信息,请查看MDN网站here

答案 1 :(得分:0)

您可以做的一件事是使用apply方法和参数变量:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

var oldOnError = window.onerror;
window.onerror = function(msg, url, line) {
    oldOnError.apply(window, arguments);
};

但正如@Bruno所说,只有一个参数应该传递给处理程序(事件)。