首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止事件处理程序堆叠使用jQuery上的文档选择器触发的单击事件

问如何防止事件处理程序堆叠使用jQuery上的文档选择器触发的单击事件
EN

Stack Overflow用户
提问于 2015-07-17 01:10:49
回答 2查看 74关注 0票数 0

我正在做一个项目,在这个项目中,我使用AJAX加载不同的HTML代码片段,以便在每个HTML片段中定位动态按钮。我必须在文档$(document).click();上触发单击事件,因为如果我尝试直接指向它们,由于按钮是动态的,并且它们会随着每个load()的变化而不断变化,所以我的Javascript没有得到任何响应。因此,当jQuery第一次绑定单击事件时,此按钮将被删除并再次加载。JQuery似乎不会使用直接选择器重新绑定事件。

问题是,每次我在子选择器上触发事件click时,它都不会清除之前绑定的click事件。如何清除这些事件以停止在具有相同类或id的不同按钮上堆叠相同的事件

代码语言:javascript
复制
    $(document).on('click', '#saveBtn', function () {
        saveQuestion(id);
    });
EN

回答 2

Stack Overflow用户

发布于 2015-07-17 01:13:21

我找到了答案:

代码语言:javascript
复制
$(document).off('click', '#saveBtn').on('click', '#saveBtn', function () {
    saveQuestion(id);
});

理解这一点的关键是你用off解除事件绑定,但你不应该在没有参数设置的情况下调用,因为它会杀死文档的单击功能,所以你将事件和子选择器传递给off函数以防止灾难,希望这对任何发现自己遇到这种麻烦的人都有帮助。

票数 0
EN

Stack Overflow用户

发布于 2015-07-17 01:22:31

您也可以使用unbind("click")。如果您只希望解除绑定到click的单个函数的绑定,您也可以命名该事件。假设你做了两个绑定,并且只想删除一个,你可以这样做。

代码语言:javascript
复制
$(document).on('click.somename1', '#saveBtn', function (/*do something*/) {});
$(document).on('click.somename2', '#saveBtn', function (/*do something else*/) {});
$(document).unbind('click.somename1', '#saveBtn');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31460516

复制
相关文章

相似问题

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