如何覆盖 jquery 事件处理程序

Posted

技术标签:

【中文标题】如何覆盖 jquery 事件处理程序【英文标题】:How to overwrite jquery event handlers 【发布时间】:2010-10-19 00:05:11 【问题描述】:

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

var fireClick = function()  alert('Wuala!!!') ;

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

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

谢谢。

【问题讨论】:

您能否就绑定事件的调用如何最终发生两次提供一些上下文?也许您可以防止第二次调用稍微改变您的代码功能。 相关:***.com/questions/209029/… 是,“瞧”。 :) 如果它回答了您的问题,请标记答案,以便其他可能需要参考此问题的用户受益。 【参考方案1】:

从 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);

【讨论】:

呸!您因链接呼叫而获胜,但可能会改进您的答案,以便仅删除重新添加的特定处理程序?所以: $('#clickme').unbind('click', fireclick).click(fireclick) 问题是“覆盖 jquery 事件处理程序”——我假设他想全部替换它们。为此,他需要每次都调用 unbind (这就是我对两者都重复调用的原因)并且不指定函数参数。 当您回答问题时,这绝对是正确的做法,所以我投了赞成票。也就是说,我相信“新的和改进的”方法是使用 on() 和 off() 方法。由于此答案是搜索“jquery replace event handler”的第一个谷歌结果,因此添加到您的答案中可能会有所帮助。 $('#clickme').off('click').on('click', fireclick); 或简单的 $('#clickme').off('click').click(fireclick); @IamChuckB 感谢您的更新,我已将其添加到我的答案中。【参考方案2】:

我会尝试消除额外的调用,但如果没有 tyhat,您可以确保每次都调用这两个:

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

【讨论】:

【参考方案3】:

你可以使用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

【讨论】:

【参考方案4】:

您应该使用 setInterval。问题是您不能同时弹出两个警报。第一个必须先关闭,否则第二个不能出现在屏幕上...

【讨论】:

【参考方案5】:

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

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

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

【讨论】:

【参考方案6】:
$(document).off('click', '#clickme').on('click', '#clickme', fireclick);

【讨论】:

以上是关于如何覆盖 jquery 事件处理程序的主要内容,如果未能解决你的问题,请参考以下文章

jquery datepicker onselect 事件处理程序多次

如何将事件处理程序绑定到 jQuery 中的实例?

jQuery 多事件处理程序 - 如何取消?

jquery如何阻止事件冒泡

Jquery 合并单击事件处理程序

如何在 jquery 中动态创建事件处理程序