jQuery 切换 show/hide 默认内容
jQuery toggle show/hide default content
我有一个 show/hide 开关,如果单击菜单 a
,它会在内容之间切换。
点击功能触发前内容如default
div所示。
出于某种原因,如果您点击其中一个 a
标签两次,它会成功切换内容 on/off; 但是你只剩下一个空白屏幕
这是糟糕的用户体验。
如何避免这种情况并确保在用户选择菜单项两次时显示默认内容?
$(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>
谢谢
尽管我建议采用完全不同的方法来处理此问题,但为了让您的代码正常工作,我还是会这样做。
https://jsfiddle.net/6cnt95ap/1/
$(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');
window.setTimeout(()=>{
var showDefault = true, divs = $('.show');
divs.each(function(){
if($(this).css("display") !=='none'){
showDefault = false;
return false;
}
});
if(showDefault){
$('.default').removeClass('hidden');
}
}, 500)
});
})
我有一个 show/hide 开关,如果单击菜单 a
,它会在内容之间切换。
点击功能触发前内容如default
div所示。
出于某种原因,如果您点击其中一个 a
标签两次,它会成功切换内容 on/off; 但是你只剩下一个空白屏幕
这是糟糕的用户体验。
如何避免这种情况并确保在用户选择菜单项两次时显示默认内容?
$(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>
谢谢
尽管我建议采用完全不同的方法来处理此问题,但为了让您的代码正常工作,我还是会这样做。 https://jsfiddle.net/6cnt95ap/1/
$(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');
window.setTimeout(()=>{
var showDefault = true, divs = $('.show');
divs.each(function(){
if($(this).css("display") !=='none'){
showDefault = false;
return false;
}
});
if(showDefault){
$('.default').removeClass('hidden');
}
}, 500)
});
})