下拉菜单链接显示/隐藏问题

时间:2014-02-24 08:33:27

标签: jquery

需要完成两个问题。

  1. 单击“菜单项”容器内的复选框时,不应显示下拉列表。
  2. 当我在页面的任何位置点击菜单外时,应隐藏下拉列表。
  3. 这是我的Jsfiddle:

    http://jsfiddle.net/awaises/5FfgZ/

    流动是我的代码。

    HTML
    <div class="check_dropdown">
    <input type="checkbox"> <a href="#" class="menu_item">Menu Item</a>
     <ul class="leads_menu">
      <li><a href="#">Sub Menu</a></li>
      <li><a href="#">Sub Menu</a></li>
      <li><a href="#">Sub Menu</a></li>
      <li><a href="#">Sub Menu</a></li>
     </ul>
    </div>
    
    CSS
    .check_dropdown{
        background:#edecec;
        padding:2px;
        display:inline-block;
        }
    .leads_menu {
        display: none;
        position:absolute;
        color: #000;
        cursor:pointer;
        background:#edecec;
    }
    
    jQuery
    $(function() {
        $(".check_dropdown").each(function() {
            if ($(this).find(".menu_item").length > 0) {
                $(this).mousedown(function() {
                    $(this).find(".leads_menu").stop(true, true).slideToggle();
                });          
            }
        });
    });
    

4 个答案:

答案 0 :(得分:2)

我已更新您的小提琴(Click here)以检查以下内容:

  1. 如果点击的元素是复选框,则阻止显示下拉菜单。
  2. 点击HTML网页中的任意位置以触发下拉隐藏。
  3. 更改是在JS级别:http://jsfiddle.net/5FfgZ/3/

    $(function() {
        var menuClicked = false; //Check if user opened the dropdown
        $(document).on('click', function(){
            if(menuClicked){
                menuClicked = false;   
                return;
            }
            if($(".leads_menu").css('display') != 'none'){
                $(".leads_menu").stop(true, true).slideToggle();
            }
        });
        $(".check_dropdown").each(function(e) {
            if ($(this).find(".menu_item").length > 0) {
                $(this).mousedown(function(e) {
                    if($(e.target).attr('type') == 'checkbox') return; //Check if element clicked is a checkbox.
                    $(this).find(".leads_menu").stop(true, true).slideToggle();
                    menuClicked = true;
                });          
            }
    
        });
    });
    

答案 1 :(得分:0)

这可能是你想要的

$(document).click(function(){
 $(".leads_menu").hide();
});

$(".menu_item").click(function(e){
  e.stopPropagation();
});

答案 2 :(得分:0)

我已更新您的fiddle with a working solution

<ul class="check_dropdown">
    <li>
        <input type="checkbox"> <a href="#" class="menu_item">Menu Item</a>
        <ul class="leads_menu">
            <li><a href="#">Sub Menu</a></li>
            <li><a href="#">Sub Menu</a></li>
            <li><a href="#">Sub Menu</a></li>
            <li><a href="#">Sub Menu</a></li>
        </ul>
    </li>
    <li>
        <input type="checkbox"> <a href="#" class="menu_item">Menu Item</a>
        <ul class="leads_menu">
            <li><a href="#">Sub Menu</a></li>
            <li><a href="#">Sub Menu</a></li>
        </ul>
    </li>
</ul>

$(function() {
  $(".menu_item").click(function(e) {
    $(this).siblings('.leads_menu').stop(true, true).slideToggle();
    e.preventDefault();
  });
});

答案 3 :(得分:0)

您必须将事件绑定到文档或窗口以捕获下拉列表中的下一个单击/ mousedown以关闭它。 jquery为您提供了一个名为 one

的简单方法
$(window).one('mousedown', function() { ... });

我已经改变了你的小提琴,所以你可以看看它。 你还必须阻止mousedown事件的传播。否则它会转到你的window-object并调用一个绑定的方法。

http://jsfiddle.net/5FfgZ/2/