Ссылка раскрывающегося меню показать / скрыть проблему

0

Необходимо решить два вопроса.

  1. Выпадающее окно не должно появляться, когда я нажимаю флажок в контейнере Item Item.
  2. Выпадающее окно должно быть скрыто, когда я выхожу за пределы меню в любом месте страницы.

Вот мой 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 ответа

2
Лучший ответ

Я обновил вашу скрипку (нажмите здесь), чтобы проверить следующее:

  1. Если элемент, щелкнутый по элементу, является флажком, то запрещается отображать раскрывающееся меню.
  2. Сделал щелчок в любом месте веб-страницы HTML, чтобы вызвать раскрывающийся список, чтобы скрыть.

Изменения находятся на уровне 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;
            });          
        }

    });
});
0

Вы должны привязать событие к документу или окну, чтобы поймать следующий щелчок /mousedown вне раскрывающегося списка, чтобы закрыть его. jquery дает вам простой метод для этого

$(window).one('mousedown', function() { ... });

Я изменил вашу скрипку, чтобы вы могли ее посмотреть. также вы должны предотвратить распространение события mousedown. в противном случае он перейдет к вашему оконному объекту и вызовет односвязный метод.

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

0

Возможно, вы хотите

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

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

Я обновил вашу скрипку рабочим решением

<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();
  });
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню