提问人:fafa 提问时间:8/5/2023 最后编辑:fafa 更新时间:8/5/2023 访问量:23
为什么这个jQuery选择器对我不起作用?
Why this jQuery selector does not work for me?
问:
每次单击网页上除特定对象以外的任何内容时,我都尝试启动一个操作(菜单“树水平线”按钮,类名为“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/
答:
2赞
Julien Duris
8/5/2023
#1
您的选择器是 。 触发事件,因为它是没有绑定到它的类。并且是 的父级。div:not(.navbutton)
<div class="test">
click
div
.navbutton
.test
.navbutton
您有一些选择:
- 在选择器中添加
.test
not
- 单击以停止传播事件,如下所示
.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,但由于某种原因它现在停止工作了。
评论