我有一个包含“按钮”的水平菜单。单击该按钮可打开子菜单(不需要悬停时打开菜单)。单击相同的按钮时,子菜单将被隐藏,如下所示:
标记
<div class="toolbar">
<div class="popout-wrap">
<div class="button">
</div>
<div class="popout">
blah blah blah
</div>
</div>
<div class="popout-wrap">
<div class="button">
</div>
<div class="popout">
blah blah blah
</div>
</div>
...
jQuery代码
$(".popout-wrap .button").click(function () {
var menu = $(this).siblings(".popout");
if (menu.is(":hidden")) {
$(".popout").not(":hidden").fadeOut("fast");
menu.css("top", -1 * (menu.outerHeight() + 8) + "px");
menu.fadeIn("fast");
} else {
menu.fadeOut("fast");
}
return false;
});
要求用户点击同一按钮隐藏其相应的子菜单不是很直观。什么是使其更直观/本能/易于使用的最佳方法?我认为点击文档中的任何地方都会忽略弹出菜单,但不确定(i)是否是一个好主意(ii)如果它是如何实现它。
答案 0 :(得分:2)
我保证用超时加香的mouseout
方法。基本上,用户必须在元素之外花费至少一段时间(按下的按钮和弹出的菜单)。
答案 1 :(得分:1)
鼠标输出还可以,但是我也可以将它连接到文档中的任意位置,就像弹出窗口在大多数操作系统上的工作方式一样:
//to prevent hiding when clicking on popup but it is not necessary
//$(".popout-wrap .popout").click()(function(){return false});
$(document).click(function(){
var menu = $(".popout-wrap .popout");
if (menu.is(":visible")) {
menu.fadeOut("fast");
}
return false;
});
答案 2 :(得分:0)
或许在按钮()中添加一个模糊处理程序并关闭该处理程序中的弹出窗口。
$(".popout-wrap .button").blur(function () {
$(this).siblings(".popout").fadeOut("fast");
return false;
});
除了它不是一个真正的按钮,它的div不会收到焦点,因此没有模糊事件。为什么不把它们变成真正的按钮?