有没有办法告诉浏览器在'window.resize'等事件上运行addtional java脚本函数而不是覆盖已存在的东西?
使用jquery的
$(window).resize(<something>);
似乎要取代现有的东西。有没有办法告诉它另外做一些事情? 这是一个糟糕的设计/错误的方式吗?
答案 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删除,除非它知道函数的确切位置。