我有一个非常简单的 jQuery 下拉菜单,其中包含通常的 ul/li 列表排列中的链接。下拉菜单的代码如下:
$('body').ready(function() {
if(screen.width <= 720) {
$('.dropdown').hover(function() { $(this).find('.subMenu').toggle(); });
$('.dropdown').click(function() { if( $('this').css('display') != 'none') {
$('this').toggle();
}
});
}
else
{
$('.dropdown').hover(
function() { $(this).stop(true,true).find('.subMenu').slideDown("fast"); },
function() { $(this).stop(true,true).find('.subMenu').hide(); }
);
}
});
在移动设备上(忽略 720 宽度,现在只是为了测试),我想实现以下功能:
用户点击带有下拉菜单的链接 > 如果菜单已打开,请关闭它
用户在另一个菜单已打开时点击链接 > 关闭上一个菜单,打开当前菜单
- 用户点击页面上的其他位置 > 关闭所有打开的菜单
我发现悬停功能实际上处理了#2 和#3,但我不知道如何让#1 工作。我很确定我知道为什么要进行这种特殊的尝试
$('.dropdown').click(function() { if( $('this').css('display') != 'none') {
$('this').toggle();
}
});
失败。我猜点击(或点击,在这种情况下)触发悬停事件,这似乎优先,因此显示菜单,而不是隐藏它。
我怎样才能让它在移动设备上工作?
编辑:我正在使用 jQuery v1.7.2
HTML列表结构如下,以防对某人有帮助(精简版):
<div id="navbar">
<ul>
<li class="dropdown"><a href="#">Link A</a></li>
<li class="dropdown"><a href="#">Link B</a>
<ul class="subMenu">
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
</ul>
</li>
</ul>
</div>