如何覆盖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或第二个不能出现在屏幕上…