如何检查子菜单是否显示没有setInterval功能
How to check if subMenu is shown without setInterval function?
我遇到了一个问题。我在我的网站上有一些子菜单,我用jQuery显示和隐藏。#Sekundar是子菜单,但我想问的是,是否有更好的方法来检查菜单是否显示?
我不能让它使它工作,除非我把一个setInterval上,这不是最好的方式做它,我认为?有什么建议吗?
下面是JS代码:function sekundarmenu() {
$('#sekundar').fadeToggle();
$('#sekundar2').hide();
$('#sekundar3').hide();
$('#sekundar4').hide();
$('#sekundar5').hide();
}
setInterval(function () {
if ($("#sekundar").is(":visible") || $("#sekundar").css("display")== "block") {
$("#li1").css("background-color", "#24ac5f");
}
else {
$("#li1").css("background-color", "transparent");
}
}, 1);
和HTML:
<nav id="primar">
<ul>
<li id="li1"><a onclick="sekundarmenu()" class="pointer">Indhold</a></li>
<li id="li2"><a onclick="sekundarmenu2()" class="pointer">Nyheder</a></li>
<li id="li3"><a onclick="sekundarmenu3()" class="pointer">Billeder</a></li>
<li id="li4"><a onclick="sekundarmenu4()" class="pointer">Bruger</a></li>
<li id="li5"><a onclick="sekundarmenu5()" class="pointer">Diverse</a></li>
</ul>
</nav>
</header>
<div id="sekundar" class="sekundar">
<nav class="nav2">
<ul>
<li><a href="#">Opret Tekster</a></li>
<li><a href="#">Rediger/Slet tekster</a></li>
<li><a href="#">Rediger kontakt</a></li>
</ul>
</nav>
</div>
既然有许多方法可以解决类似的问题,您必须选择最适合您的情况。
在这把小提琴里我想通过在HTML代码中添加一些类以另一种方式解决问题。
这样可以大大减少jQuery代码。我还添加了在mouseleave上消失子菜单的功能,如果您不喜欢这个解决方案,您可以轻松删除在fiddle中突出显示的代码行。
如果你喜欢这个解决方案,记得用绿色标记我的答案;)
你需要的jQuery代码是:
<script type="text/javascript">
$(document).ready(function(){
$('li.principal').click(function(){
var whatSubmenu=$(this).attr('id').slice(1)
$('li.principal').css("background-color", "transparent")
$(this).css("background-color", "#24ac5f")
$('div.sekundar').hide()
$('.'+whatSubmenu).fadeIn()
})
/*IF you don't want the submenu disappear on mouseleave comment these lines of code*/
$('div.sekundar').on('mouseleave',function(){
$(this).hide()
$('li.principal').css("background-color", "transparent")
})
})
</script>
html: <header>
<nav id="primar">
<ul>
<li class="principal" id="li1"><a class="pointer">Indhold</a></li>
<li class="principal" id="li2"><a class="pointer">Nyheder</a></li>
<li class="principal" id="li3"><a class="pointer">Billeder</a></li>
</ul>
</nav>
</header>
<div id="sekundar" class="sekundar i1">
<nav class="nav2">
<ul>
<li><a href="#">Osadff</a></li>
<li><a href="#">Rwefewg</a></li>
<li><a href="#">Reehjy</a></li>
</ul>
</nav>
</div>
<div id="sekundar2" class="sekundar i2">
<nav class="nav2">
<ul>
<li><a href="#">dgdgdg</a></li>
<li><a href="#">sdfdfdg</a></li>
</ul>
</nav>
</div>
<div id="sekundar3" class="sekundar i3">
<nav class="nav2">
<ul>
<li><a href="#">defdgdgdg</a></li>
</ul>
</nav>
</div>
在这个简单的例子中,您有一个按钮显示或隐藏子菜单。
要验证菜单是否可见,只需使用toggleclass方法给它一个类,然后检查这个类是否存在。
<!DOCTYPE HTML>
<html>
<head>
<style>
#sekundar{
display:none;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#test').click(function(){
$('#sekundar').toggleClass('visible')
if($('#sekundar').hasClass('visible')){
alert('not visible')
$('#sekundar').show()
}else{
alert('visible')
$('#sekundar').hide()
}
})
})
</script>
</head>
<body>
<div id="sekundar" class="sekundar">
<nav class="nav2">
<ul>
<li><a href="#">Opret Tekster</a></li>
<li><a href="#">Rediger/Slet tekster</a></li>
<li><a href="#">Rediger kontakt</a></li>
</ul>
</nav>
</div>
<input name="" type="button" value="check" id="test">
</body>
</html>
相关文章:
- 是否有任何JavaScript UI组件可以显示字符串之间的差异
- 使用Booklet Jquery插件,我如何验证最后一页是否显示
- 是否可以用JavaScript显示等效的文件夹对话框
- 检查搜索结果是否存在多次如果是,则在Javascript中只显示一个结果
- 是否可以将JXBrowser显示的JS确认对话框的结果返回到调用它的JS部分
- 是否可以使用flexbox显示模型设置元素的滚动位置
- 隐藏/显示下面的分区根据是否选择某个选项进行选择
- 是否可以在不重新渲染的情况下显示/隐藏父对象中的元素
- 是否可以使用不同投影的另一个WMS层显示OSM数据
- 检查资源的id是否在ng重复中显示的另一个资源的id列表中
- 如何在将鼠标悬停在提交/锚点上时检查复选框是否已选中,并显示提示用户这样做的警报
- 在Chrome扩展程序中,是否可以截屏并在弹出窗口中显示屏幕
- 交换 img src 或显示/隐藏多个图像是否更快
- Javascript检查url是否存在并检查其上显示的一些信息
- 数据仅用于显示是否触摸输入 - AngularJs
- Javascript在单击外部时弹出隐藏,并显示是否单击了链接
- 弹出标记不显示是否已单击标记
- 显示是否所有输入都为空
- 显示是否隐藏jQuery
- 使用 Javascript 检查显示是否为无