添加javascript函数调用事件(例如'window.resize')而不是覆盖已存在的事件

时间:2011-06-28 00:56:20

标签: javascript jquery events

有没有办法告诉浏览器在'window.resize'等事件上运行addtional java脚本函数而不是覆盖已存在的东西?

使用jquery的

$(window).resize(<something>);

似乎要取代现有的东西。有没有办法告诉它另外做一些事情? 这是一个糟糕的设计/错误的方式吗?

4 个答案:

答案 0 :(得分:3)

我不认为jQuery会破坏那里的东西,但你可以将函数包装在一个函数中:

    // if a function already exists...
if( window.onresize ) {
    var prev_func = window.onresize;  // cache the old function

    window.onresize = function( event ) {  // new function for resize

        prev_func.call( window, event );  // call the old one, setting the
                                          //  context (for "strict mode") and 
                                          //  passing on the event object

        // call your code or function

    };
}

编辑:修正了它使用onresize代替resize

EDIT2:错过了一个!固定的。

答案 1 :(得分:1)

如果您使用jQuery绑定所有事件处理程序,那么您不会破坏任何东西。 jQuery支持同一事件的多个处理程序。

但是如果其他代码(不使用jQuery)绑定到事件,那么你将用你的语句覆盖处理程序。解决方案将是:始终使用jQuery进行事件绑定或尝试保存旧处理程序(请参阅patrick dw's answer)。

答案 2 :(得分:1)

请参阅element.addEventListener(IE 8及以下版本中的element.attachEvent):

// Standards
if (window.addEventListener){
    window.addEventListener("resize", callOnResize, false); 
// IE 8 and under
} else if (window.attachEvent){
    window.attachEvent('resize', callOnResize);
}

function callOnResize() {
  console.log("resized");   
}

请记住,这是纯JavaScript-jQuery(几乎任何大型JS库)都有一个方法来处理创建标准和IE处理程序,而无需编写每个。不过,知道幕后发生的事情真是太好了。

答案 3 :(得分:0)

jQuery和支持自定义事件的所有其他框架将函数附加到elem的事件(或观察它)。该函数然后触发已绑定(使用bind)特定事件类型的所有函数。

domelement.addEventListener不会覆盖其他函数,并且添加的函数无法被其他(坏)javascript删除,除非它知道函数的确切位置。