【发布时间】:2020-05-13 19:15:59
【问题描述】:
如果单击菜单a,我有一个显示/隐藏切换开关。
点击功能触发前的内容显示在default div中。
由于某种原因,如果您两次单击a 标记之一,它会成功打开/关闭内容; 但是您会看到一个空白屏幕
这是一个糟糕的用户体验。
如何避免这种情况并确保在用户选择菜单项两次时显示默认内容?
$(document).ready(function() {
var $show = $('.show');
$('.menu a').on('click', function(e) {
e.preventDefault();
$show.not(this).stop().hide(450);
$($(this).attr('href')).stop().toggle(450);
$('.default').addClass('hidden');
});
});
.hidden {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="menu">
<a href="#show-screen">Screen</a>
<a href="#show-music">Music</a>
<a href="#show-art">Art</a>
<a href="#show-food">Food</a>
</div>
<div id="show-screen" class="show">show screen</div>
<div id="show-music" class="show">show music</div>
<div id="show-art" class="show">show art</div>
<div id="show-food" class="show">show food</div>
<div class="default">default content</div>
谢谢
【问题讨论】:
-
你的意思是如果显示并再次点击你不想隐藏?
-
@pc_coder 是的,所以如果我通过单击两次完成显示/隐藏操作 - 我希望默认的
div可见。与空白屏幕相反 -
var atLeastOneElemtVisible = false, divs = $('.show'); divs.forEach(elem=>{ if(!elem.style.visiblity('hidden')){ // 更正语法 atLeastOneElemtVisible = true; break; } }); if(!atLeastOneElemtVisible){ $('.default').removeClass('hidden'); }
-
@RahulDwivedi 您可以将该代码添加为答案,而不是评论。
-
当然 只是这样做了。基本上这是这个想法:检查是否所有的
showdiv 都被隐藏了。如果是,请从您的defaultdiv 中删除hidden类。如有任何语法错误,请见谅。
标签: javascript jquery toggle show-hide