首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击.on()和:not

单击.on()和:not
EN

Stack Overflow用户
提问于 2013-09-25 10:24:49
回答 5查看 64关注 0票数 0
代码语言:javascript
复制
$(document).on('click', 'body:not(.add-to)', function(e){
    //$('.tooltip').hide();
    console.log('clik');
});

使用上述方法,只要单击页面,console.log就会显示clik,即使当我单击元素.add-to时,它也会在不应该触发的情况下触发该元素。

我搞砸什么了吗?

代码语言:javascript
复制
<ul class="user-controls">
    <li>
        <a class="add-to" href="#">
            <img src="/assets/img/icons/add-feed.png" class="favicon">
            <span>Add</span>
        </a>
        <div></div>
    </li>
</ul>
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-09-25 10:26:21

如果选择器body:not(.add-to)不公开add-to类,则它与页面的add-to元素匹配。它不会和它的任何后代相配。

你可能在寻找:

代码语言:javascript
复制
$(document).on('click', 'body :not(.add-to)', function(e) {
    console.log('click');
});

但在这种情况下,body祖先并不是必需的,您只需编写:

代码语言:javascript
复制
$(document).on('click', ':not(.add-to)', function(e) {
    console.log('click');
});

编辑:从您发布的标记中可以看出,单击<img><span>元素将触发处理程序,因为这些元素中没有一个公开add-to类本身。

您可以通过将最近()应用于e.target来解决此问题。

代码语言:javascript
复制
$(document).on("click", function(e) {
    if (!$(e.target).closest(".add-to").length) {
        console.log("click");
    }
});

请注意,将:not(.add-to *)传递给on()将产生几乎相同的结果,但不完全相同:如果<a>元素有文本内容并单击内容,则该选择器不会阻止对console.log()的调用被执行。

另一方面,基于closest()的解决方案确实防止在这种情况下执行console.log()

票数 3
EN

Stack Overflow用户

发布于 2013-09-25 10:26:22

在身体之间添加一个空格以获得装饰

代码语言:javascript
复制
$(document).on('click', 'body :not(.add-to)', function(e){
    //$('.tooltip').hide();
    console.log('clik');
});
票数 0
EN

Stack Overflow用户

发布于 2013-09-25 10:26:35

那里不需要身体

代码语言:javascript
复制
$(document).on('click', ':not(.add-to)', function(e){
    //$('.tooltip').hide();
    console.log('clik');
});

到目前为止,您正在告诉那个没有类.add-to的主体

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

https://stackoverflow.com/questions/19002361

复制
相关文章

相似问题

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