首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery防止单击后发生其他事件

jQuery防止单击后发生其他事件
EN

Stack Overflow用户
提问于 2010-08-13 07:59:14
回答 6查看 77.3K关注 0票数 30

我正在尝试阻止链接和项目上的多次点击,这会导致问题。

我使用jQuery将单击事件绑定到按钮(jQuery UI)和图像链接(<a><img /></a>)。

有没有办法一劳永逸地防止其他事件在点击发生后触发?

或者,我是否必须维护一个名为_isProcessing的全局变量,并为每个事件处理程序将其设置为true?

谢谢

编辑:(澄清)谢谢你的回答,我的问题不是阻止事件的冒泡,而是阻止多个并发点击。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-08-13 08:11:44

有多种方法可以防止并发单击来运行代码。

一种方法是在元素上执行unbind('click'),然后在准备好时再次执行.bind()

我宁愿使用某种旗帜。它可以是一个变量,但我更愿意为该元素分配一个类,比如.processing,并在完成后将其删除。因此,您应该让处理程序检查该类是否存在,以确定应该运行的代码。

代码语言:javascript
复制
$('someElement').click(function() {
    var $th = $(this);
    if($th.hasClass('processing'))
          return;
    $th.addClass('processing');
    // normal code to run
    // then when done remove the class
    $th.removeClass('processing');
});

另一种选择是使用元素.data()来设置类似的标志,如$(this).data('processing', true);,然后在完成时将其设置为false。

票数 32
EN

Stack Overflow用户

发布于 2010-08-13 08:06:32

如前所述,有event.preventDefaultevent.stopPropagation和return false。

代码语言:javascript
复制
$("a").click(function(e) {
    e.preventDefault();
    e.stopPropagation();
    return false;
}
票数 27
EN

Stack Overflow用户

发布于 2010-08-13 08:01:57

你查过preventDefault了吗?

代码语言:javascript
复制
$("a").click(function(e) {
    e.preventDefault();
}

您还可以尝试使用stopImmediatePropagation()stopPropagation()

您还可以查看one()事件。

将处理程序附加到元素的事件。每个元素最多执行一次处理程序。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3472953

复制
相关文章

相似问题

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