gpt4 book ai didi

javascript - jQuery 按类隐藏元素并不隐藏所有元素

转载 作者:行者123 更新时间:2023-12-02 20:52:45 24 4
gpt4 key购买 nike

我遇到了问题。当我隐藏具有特定类的所有元素时,仅隐藏所单击的元素除外。我不知道为什么会发生这种情况。

如果我将弹出窗口放在页面上的其他位置,它就可以工作。我认为它必须与CSS有关,但我无法弄清楚哪个属性导致了这个问题。

代码

      $('.scroll-nav-item').click(function() {
$(this).find('.popup').show();
});
$('.close-popup').click(function() {
$('.popup').hide();
});
:root{
--nav-height: 5rem;
--one-page-minus-nav-height: calc(100vh - var(--nav-height));
--scroll-nav-width: 80px;
--bg-light: #f8f9fa;
--bg-dark: #343a40;
--bg-dark-hover: #606b76;
}

#scroll_nav{
overflow: visible;
position: absolute;
left: 0;
top: calc(var(--nav-height) + 10rem);
width: var(--scroll-nav-width);
background-color: rgba(255, 255, 255, 0.5);
}
.scroll-nav-item{
display: flex;
overflow: visible;
justify-content: center;
align-items: center;
position: relative;
color: var(--bg-light);
--offset: 5px;
width: calc(var(--scroll-nav-width) - calc(var(--offset) / 2));
height: calc(var(--scroll-nav-width) - var(--offset));
margin: calc(var(--offset) / 2) calc(var(--offset) / 2) calc(var(--offset) / 2) 0;
border: 2px solid var(--bg-light);
background-color: var(--bg-dark);
cursor: pointer;
}
.popup{
position: absolute;
left: var(--scroll-nav-width);
cursor: auto;
background-color: white;
color: black;
}
.close-popup{
cursor: pointer;
}
.scroll-nav-item:hover{
background-color: var(--bg-dark-hover);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body style="background-color: #A3A3A3">
<!-- Scroll Navigation -->
<div id="scroll_nav" class="d-none d-lg-block rounded-right" style="">
<div class="scroll-nav-item rounded">
open Popup
<div class="popup" style="display: none; min-width: 600px">
Popin around
<span class="close-popup"><b>close</b></span>
</div>
</div>
<div class="scroll-nav-item rounded">
2
</div>
<div class="scroll-nav-item rounded">
3
</div>
<div class="scroll-nav-item rounded">
open popup
<div id="pu1" class="popup" style="display:none; min-width: 600px">
popin around
<span class="close-popup"><b>close</b></span>
</div>
</div>
</div>
<body>

如您所见,如果您打开两个弹出窗口并尝试关闭其中一个,则只有另一个弹出窗口会被隐藏。

你能帮我理解我的代码有什么问题吗?

最佳答案

当您单击关闭时,处理程序将被执行,隐藏与您的选择器匹配的所有元素。

处理程序完成后,事件 bubbles up 到达 DOM,到达 .nav-item 父级并触发其处理程序,因为它毕竟是一个 click 事件,导致在子弹出窗口中再次显示。

要解决这个问题,你必须stop the event from bubbling

$('.close-popup').click(function(e) {
e.stopPropagation();
$('.popup').hide();
});

这将隐藏所有打开的弹出窗口。如果您只想关闭单击的弹出窗口,则必须修改关闭处理程序,以便限制该元素,类似于使用打开处理程序和 .find() 所做的操作,方法是使用 .parent().closest() 函数。

$('.close-popup').click(function(e) {
e.stopPropagation();
$(this).parent('.popup').hide();
});

关于javascript - jQuery 按类隐藏元素并不隐藏所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61565766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com