我正在尝试创建一种全局样式的下拉菜单,当单击其菜单图标时,它会在打开和关闭之间切换,但在单击页面上的其他任何位置时也会关闭。我打开或关闭此下拉列表的方式是向下拉列表的父级添加或删除一个名为“open”的类。
这个想法(更清楚)是下拉菜单的普通类有 display: none; 设置它,但如果它是类“open”的东西的后代,那么它有 display: block;
所以,事不宜迟,这就是我目前所拥有的:“openable”是一类“父”元素,可以单击它来添加“open”类。
<script>
$(document).ready(function(){
$('.openable').click(function(){
if($(this).hasClass("open")){
$(this).removeClass("open");
}
else{
$(this).addClass("open");
}
});
});
就其本身而言,它实际上工作正常 - 它作为下拉菜单的一个足够体面的切换。当然,单击其他任何地方都不会关闭下拉菜单。
我显然不起作用的关闭脚本是:
<script>
$(document).ready(function(){
$(document).click(function(event) {
var clicked = $(event.target);
if(clicked.hasClass(".open")){
}
else{
if($(".open").length > 0){
$(".open").each(function(){
$(this).removeClass("open");
});
}
}
});
});
</script>
使用页面上的该脚本,下拉菜单完全停止工作,并且控制台不会抛出任何错误供我处理。
有更好的方法吗?
谢谢
编辑: html 标记类似于
<li class="navItem dropdown openable">
<span><img src="img/settings.png"></span>
<ul class="subNav hubDrop">
<li>Nav item 1</li>
<li>Nav item 2</li>
<li>Nav item 3</li>
<li>Nav item 4</li>
</ul>
</li>
每一个人。li 标签在另一个 ul 中(请记住,这本质上是用于下拉菜单)