如何覆盖jQuery的事件处理程序

我将尝试用简单的代码来解释这个问题。

var fireClick = function() { alert('Wuala!!!') }; $('#clickme').click(fireclick); $('#clickme').click(fireclick); 

所以现在它会明显提醒2次,但我只需要警报一次。 尝试了很多方法,但没有结果。

谢谢。

从jQuery 1.7开始,您应该使用off来移除事件处理程序并添加它们,尽pipe您仍然可以使用click速记。

 $('#clickme').off('click').on('click', fireclick); $('#clickme').off().on('click', fireclick); 

原始答案:

如果您想要replace所有的点击处理程序,请首先调用unbind,而不使用函数参数。 如果要replace所有事件处理程序,请不要指定事件types。

 $('#clickme').unbind('click').click(fireclick); $('#clickme').unbind().click(fireclick); 

使用命名空间确保您不会删除任何其他侦听器:

 $('#clickme').off('click.XXX').on('click.XXX', fireclick); 

只要没有其他代码使用XXX ,就可以确定你没有搞错其他一些你不知道的行为。

您可以使用jQuery函数unbind删除第一个事件:

 var fireClick = function() { alert('Wuala!!!') }; $('#clickme').click(fireclick); $('#clickme').unbind('click', fireClick); // fireClick won't fire anymore... $('#clickme').click(fireclick); // ...but now it will 

我会尽量消除额外的电话,但是你可以确保每次都打这两个电话:

 $('#clickme').unbind('click', fireclick); $('#clickme').click(fireclick); 

你应该使用setInterval。 问题是你不能同时popup两个警报。 第一个必须先closures或第二个不能出现在屏幕上…