我应该在用户点击外部时隐藏弹出菜单

时间:2011-04-19 08:52:12

标签: javascript jquery menu popup usability

我有一个包含“按钮”的水平菜单。单击该按钮可打开子菜单(不需要悬停时打开菜单)。单击相同的按钮时,子菜单将被隐藏,如下所示:

标记

<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)如果它是如何实现它。

3 个答案:

答案 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不会收到焦点,因此没有模糊事件。为什么不把它们变成真正的按钮?