如何覆盖以前设置的jquery事件处理程序?

时间:2012-12-28 01:44:28

标签: javascript jquery event-handling

在我的代码中,设置了一个元素的事件处理程序,它将该元素的css高度更改为100px。在其他地方,我希望在某些条件满足时运行不同的事件处理程序,这应该覆盖先前的事件处理程序并将其高度更改为200px。

有没有办法做到这一点,或清除所有以前为元素设置的事件处理程序?

3 个答案:

答案 0 :(得分:16)

是的,只需使用.off(),例如

$('selector').off('eventname')

答案 1 :(得分:3)

这有点像黑客,但听起来你正试图破解其他人的代码而无法直接更改它,这可能是你必须诉诸的。

如果您只需要在document.ready()之后调用某些内容并且您不控制document.ready()语句的顺序,那么您可以在文档中的短暂超时中放入一些代码。准备好的处理程序:

$(document).ready(function() {
    setTimeout(function() {
        $('selector').off('eventname').on(your event handler here);
    }, 1);
});

setTimeout()将在所有document.ready()处理程序运行后运行。

答案 2 :(得分:1)

另一种方式:

$(window).on('load', function() {
   $('selector').off('eventname').on(your event handler here);
});

在文档准备就绪后执行加载