为什么这个jQuery选择器对我不起作用?

Why this jQuery selector does not work for me?

提问人:fafa 提问时间:8/5/2023 最后编辑:fafa 更新时间:8/5/2023 访问量:23

问:

每次单击网页上除特定对象以外的任何内容时,我都尝试启动一个操作(菜单“树水平线”按钮,类名为“navbutton”),如下所示:

<div class="test">
    <nav id="menu" class="pdng-lr">
        <div class="navbutton">
            <span class="top"></span>
            <span class="middle"></span>
            <span class="bottom"></span>
        </div>
    </nav>
</div>

CSS:

#menu .navbutton
{
    display:none;
}

@media screen and (max-device-aspect-ratio: 1/1) and (orientation: portrait)
{
.pdng-lr
{
    padding:0px;
}

#menu .navbutton
{
    display:block;
    width:25px;
    height:38px;
    margin-top:40px;
    margin-left:calc(100% - 40px);
    border:none;
    cursor:pointer;
}

#menu .navbutton span
{
    display:inline-block;
    float:left;
    min-height:6px;
    width:100%;
    margin:2px 0px;
    background-color:#cccccc;
    -webkit-transition:all 0.15s linear;
    -moz-transition:all 0.15s linear;
    -o-transition:all 0.15s linear;
    transition:all 0.15s linear;
}

#menu .navbutton .top
{
    margin-top:6px;
}
}

我认为这个脚本可以工作:

jQuery('div:not(".navbutton")').click(function(){
    // just to test if it works
    alert();
});

...但事实并非如此:当我单击.nav按钮时,它仍然会触发操作(警报窗口打开)!

谁能告诉我代码有什么问题或如何让它工作?

我试图在 jFiddle 上让它尽可能简单,但它仍然无法正常工作,请参阅:https://jsfiddle.net/eygka3cn/3/

jquery jquery-selectors

评论

0赞 Julien Duris 8/5/2023
你能提供它附带的CSS代码吗?
0赞 fafa 8/5/2023
现在相关对象的 CSS 部分在帖子中

答:

2赞 Julien Duris 8/5/2023 #1

您的选择器是 。 触发事件,因为它是没有绑定到它的类。并且是 的父级。div:not(.navbutton)<div class="test">clickdiv.navbutton.test.navbutton

您有一些选择:

  • 在选择器中添加.testnot
  • 单击以停止传播事件,如下所示.navbutton
jQuery('.navbutton').click(function(e) {
  e.stopPropagation();
})

完整代码: https://jsfiddle.net/0r2u5x1y/

评论

0赞 fafa 8/5/2023
您的代码示例有效!现在只知道如何微调它以替换“其他一切”('div:not(“.navbutton”)')是“html”(因为我绝对希望其他任何东西都会触发动作,而不仅仅是 divs,甚至是页面上没有任何对象的空白处,“html”也会这样做! - 这也可以以某种方式完成吗?:-)
0赞 Julien Duris 8/5/2023
@fafa肯定:)尝试在选择器中替换为div*
0赞 fafa 8/5/2023
不,只是将 HTML 添加到一堆中,所以现在它就像 'html, div:not(“.navbutton”)' - 有效!:-)但是 * 也可以,所以我切换到它,因为它的代码较少,哈哈,谢谢!顺便说一句,当我在这里提出问题之前看到我所做的事情时,我真的错过了“e.stopPropagation()”中非常重要的部分;,我什至不知道它,所以你在这里也学到了一些新东西。(因为我错误地尝试使用“return false”,这是针对 each() 的,认为它甚至可以为此工作)
0赞 Julien Duris 8/5/2023
@fafa dom 事件可以使一个人真正疯狂、真正快速:DpreventDefault 和 stopPropagation 是救命稻草
0赞 fafa 8/5/2023
啊,是的,但我现在还有另一个问题:请问你是否也想为我解决这个问题?:-D在 fatc 中,启动的操作是从 display:none 到 display:inline-block 创建一个 div,但由于某种原因它现在停止工作了。