首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何覆盖jquery事件处理程序

如何覆盖jquery事件处理程序
EN

Stack Overflow用户
提问于 2009-04-12 11:25:36
回答 6查看 61.2K关注 0票数 75

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

代码语言:javascript
复制
var fireClick = function() { alert('Wuala!!!') };

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

所以现在它显然会报警2次,但我只需要它报警一次。我试了这么多方法,但都没有结果。

谢谢。

EN

回答 6

Stack Overflow用户

发布于 2009-04-12 11:29:20

从jQuery 1.7开始,您应该使用off删除事件处理程序,使用on添加事件处理程序,尽管您仍然可以使用click速记。

代码语言:javascript
复制
$('#clickme').off('click').on('click', fireclick);
$('#clickme').off().on('click', fireclick);

原始答案:

如果要替换所有单击处理程序,请先调用不带函数参数的unbind。如果要替换所有事件处理程序,请不要指定事件类型。

代码语言:javascript
复制
$('#clickme').unbind('click').click(fireclick);
$('#clickme').unbind().click(fireclick);
票数 140
EN

Stack Overflow用户

发布于 2014-10-22 17:49:16

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

代码语言:javascript
复制
$('#clickme').off('click.XXX').on('click.XXX', fireclick);

只要没有其他代码使用XXX,您就可以确信您没有搞砸一些您没有意识到的其他行为。

票数 24
EN

Stack Overflow用户

发布于 2009-04-12 11:30:58

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

代码语言:javascript
复制
var fireClick = function() { alert('Wuala!!!') };

$('#clickme').click(fireclick);
$('#clickme').unbind('click', fireClick); // fireClick won't fire anymore...
$('#clickme').click(fireclick); // ...but now it will
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/741628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档