焦点丢失时隐藏元素

时间:2012-03-14 14:10:18

标签: javascript jquery css drop-down-menu show-hide

我正在使用css和jquery进行下拉菜单。我希望菜单打开,直到我点击某些内容或直到我点击菜单。

这就是我的尝试:

$('#optionButton').click(function() {
$('#dropMenu').css('visibility' , 'visible')    //optionButton clicked, menu visible
});

$('*').not('#optionButton').click(function() {
$('#dropMenu').css('visibility' , 'hidden') //clicked eanithing else: menu close
});

但它没有达到预期效果。

4 个答案:

答案 0 :(得分:4)

当您单击DOM对象时,它会执行事件冒泡,这意味着它从最特定的对象开始并向DOM树中冒泡,直到它到达document对象。您可以通过返回false来阻止事件冒泡DOM树。

$(document).click(function() {
  $('#dropMenu').hide();
});

$('#optionButton').click(function() { 
  $('#dropMenu').show();
  return false;
});

请注意我是如何使用hideshow方法而不是css('visibility' , 'visible/hidden')的方法。实际上这两个do slightly different things,如果你只想隐藏一个元素,hide方法是在jQuery中最简单的方法。

您可以看到working example of this on jsFiddle

答案 1 :(得分:3)

试试这个:

$("body").click(function(e) {
    if ( e.target.id === "optionButton" ) {
        $("#dropMenu").css("visibility", "visible");
    }
    else {
        $("#dropMenu").css("visibility", "hidden");
    }
});

或者,同一件事的较短版本:

$("body").click(function(e) {
    $("#dropMenu").css("visibility", ( e.target.id === "optionButton" ? "visible" : "hidden" ));
});

答案 2 :(得分:3)

我只使用CSS进行了实验。可能是你的工作。

检查http://jsfiddle.net/ZuLHb/1/

答案 3 :(得分:2)

您可以在文档上绑定click事件以关闭mùeny:

$(document).click(function() {
    $('#dropMenu').css('visibility' , 'hidden') //clicked eanithing else: menu close
});

重要的是你在#optionButton的点击事件上停止事件传播,否则事件将冒泡到文档并执行附加到它的点击处理程序:

$('#optionButton').click(function(e) {
    $('#dropMenu').css('visibility' , 'visible')    //optionButton clicked, menu visible
    e.stopPropagation();
});

<强> DEMO