当您使用jQuery单击页面中的某个位置时关闭下拉菜单?

时间:2014-10-20 05:48:34

标签: javascript jquery html css

我有一个简单的下拉菜单,我在内联文字链接上显示。我在点击链接时使用jQuery click事件显示Dropdown菜单。

我想做的是在任何地方点击时,Dropdown菜单会回到隐藏状态。现在,您必须再次单击该链接以关闭菜单。

演示http://codepen.io/jasondavis/pen/sFpwK?editors=101

的jQuery

// Show Dropdown Menu when link is clicked
$(function(){
  $(".inline-dropdown-menu").click(function(e){
    $(this).find(".inline-dropdown-menu-list:first").toggle();
    e.preventDefault(); // Stop navigation
  });
});

HTML

<span class="inline-dropdown-menu">
    <a href="">My Link that reveals a DropDown Menu when clicked on<span class="caret"></span></a>

    <ul class="inline-dropdown-menu-list">
        <li class="bottomBorder">
            <a href="" tabindex="-1">alphabetically</a>
        </li>
        <li>
            <a href="" tabindex="-1">2. the first report, alphabetically</a>
        </li>
        <li>
            <a href="" tabindex="-1">3. the first report, alphabetically</a>
        </li>
    </ul>
</span>

6 个答案:

答案 0 :(得分:3)

http://codepen.io/anon/pen/JmLsB

$(function () {
    $(".inline-dropdown-menu").click(function (e) {
        $(".inline-dropdown-menu-list").hide(); // to hide other drop down
        $(this).find(".inline-dropdown-menu-list:first").toggle();

        e.preventDefault(); // Stop navigation
    });
});

// to hide drop down if you click other than inline-dropdown-menu class

$(document).click(function (e) {
    var container = $(".inline-dropdown-menu");
    if (!container.is(e.target) && container.has(e.target).length === 0) {
        $(".inline-dropdown-menu-list").hide();
    }
});

答案 1 :(得分:3)

这可能有用:

var flag = false;

$(".inline-dropdown-menu").click(function(e){
    $(".inline-dropdown-menu-list").not(':hidden').hide();
    $(this).find(".inline-dropdown-menu-list:first").toggle();
    e.preventDefault(); // Stop navigation
    flag = true;   
});

$('body').click(function(){
    if (flag) {
        flag = false;
        return;
    }

    $(".inline-dropdown-menu-list").not(':hidden').hide();
});

答案 2 :(得分:1)

试试这个

$(function(){
  $(".inline-dropdown-menu").click(function(e){
e.stopPropagation();
$(this).find(".inline-dropdown-menu-list:first").toggle();
e.preventDefault(); // Stop navigation
 });

$("body").click(function(e){
$(".inline-dropdown-menu-list").hide();
});

});

答案 3 :(得分:0)

点击链接后,您必须向正文添加点击事件。单击正文时,您可以隐藏下拉列表,并再次删除正文上的事件。我使用setTimeout来防止双击。我还为body上的click事件添加了一个命名空间(click.ddls),这样你就可以有其他点击事件。

请查看此演示:http://jsfiddle.net/gdxyef46/2/

// Show Dropdown Menu when link is clicked
$(function(){

  $(".inline-dropdown-menu a").click(function(e){
      e.preventDefault(); // Stop navigation
      $("body").off("click.ddls");
      $(".inline-dropdown-menu-list").toggle();

      //to prevent double click
      setTimeout(function(){
          $("body").on("click.ddls", function(){
              console.log("body clicked");
              $(".inline-dropdown-menu-list").hide();
              $("body").off("click.ddls");
          });
      }, 300);
  });

});

答案 4 :(得分:0)

没有唯一的类名,你可以循环遍历它们并检查它们是否可见,如果是,则关闭它。这段代码不起作用(道歉),但希望能指出正确的方向。我个人喜欢使用on("click") vs click(),以防您处理DOM尚无法访问的动态元素。

     $('*').not(".inline-dropdown-menu").on("click", function(){
         $('.inline-dropdown-menu-list').each(function() {
             if ($(this).is(":visible")) {
                 $(this).toggle();
             }                                                                 
         });

您还可以根据$('.inline-dropdown-menu-list').length创建一个计数器,并为每个计数器分配data-id,以便您可以匹配并跟踪它们。希望这可以帮助。

答案 5 :(得分:-1)

如果我理解正确你想要复制下拉箭头正在做什么,当你点击身体时。如果是这样,那么试试这个:

$("body").click(function(e){
$('.inline-dropdown-menu.open ').find('.inline-dropdown-menu-list:first').toggle();
});

链接到demo。 但请注意,如果再次单击正文,它将再次显示下拉列表。如果您不想要,可以使用它来删除它。