我将尝试用简单的代码解释问题。
var fireClick = function() { alert('Wuala!!!') };
$('#clickme').click(fireclick);
$('#clickme').click(fireclick);
所以现在它显然会提醒2次,但我只需要提醒一次。尝试了很多方法,但没有结果。
感谢。
答案 0 :(得分:128)
从jQuery 1.7开始,您应该使用off删除事件处理程序,on添加它们,但您仍然可以使用click
简写。
$('#clickme').off('click').on('click', fireclick);
$('#clickme').off().on('click', fireclick);
原始答案:
如果要替换所有点击处理程序,请先调用unbind,不要使用函数参数。如果要替换所有事件处理程序,请不要指定事件类型。
$('#clickme').unbind('click').click(fireclick);
$('#clickme').unbind().click(fireclick);
答案 1 :(得分:22)
使用命名空间确保不删除任何其他侦听器:
$('#clickme').off('click.XXX').on('click.XXX', fireclick);
只要没有其他代码使用XXX
,您就可以确定没有搞砸其他一些您不知道的行为。
答案 2 :(得分:18)
您可以使用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
答案 3 :(得分:3)
我会尝试消除额外的电话,但是你可以确保每次调用这两个电话:
$('#clickme').unbind('click', fireclick);
$('#clickme').click(fireclick);
答案 4 :(得分:0)
$(document).off('click', '#clickme').on('click', '#clickme', fireclick);
答案 5 :(得分:-9)
您应该使用setInterval。问题是您不能同时弹出两个警报。第一个必须先关闭,否则第二个不能出现在屏幕上......