2014-01-26 3 views
0

Я нашел пару тем, относящихся к этой проблеме, но ни один из них, к сожалению, не работал для меня. Я использую этот метод JQuery, как это:Как скрыть jQuery toggle(), когда я выхожу за пределы меню?

//jQuery 
$('.menu_user').click(function(){ 
    $(".top_menu").toggle(); 
}); 
// HTML 
<div class="menu_user">MENU</div> 
<nav class="top_menu"> 
    ... 
</nav> 

В принципе, когда я нажимаю на MENU DIV, меню катились, когда я нажимаю на него снова, то меню сворачивается = скрыто. Проблема в том, что когда меню катится вниз, и я выхожу за пределы div Menu, меню остается отображаемым - и я хотел бы скрыть его.

Я прошел несколько учебных пособий, но я не нашел решения, которые бы разрешили эту проблему.

Буду рад за каждую помощь в связи с этой проблемой.

Спасибо!

+0

возможно дубликат [Как обнаружить щелчок вне элемента?] (Http://stackoverflow.com/questions/152975/how-to-detect-a-click-outside-an-element) – undefined

+0

Может быть, jQuery .focus() .blur()? – TimSPQR

ответ

0

Вы можете использовать

$(document).on("click", function() { 

    if ($('.top_menu:hover').length === 0) { 
     //hide the stuff 
     //roll up menu 
     $(".top_menu").hide(); 
    } else if ($('.menu_user:hover').length === 0) { 
     $(".top_menu").toggle(); 
    } 

}); 

так, что когда меню катились и пользователь нажал вне .top_menu он свернет .top_menu

Помните, что приведенный выше код будет срабатывать каждый раз, пользователь нажимает на страницу.

+0

'Помните, что указанный код будет срабатывать каждый раз, когда пользователь нажимает на страницу.' - это своего рода «страшный». Я хотел бы попытаться найти более элегантное решение, с этим не справиться, используя методы, связанные с 'toggle()'? – user984621

+0

@ user984621 вы не должны использовать 'toggle()' в приведенном выше коде, потому что если вы используете переключатель каждый раз, когда пользователь нажимает что-то на экране, меню будет открываться и закрываться. Поэтому мы используем 'hide()'. На самом деле это не «ужасно», даже если пользователь делает 60 кликов в секунду с момента своего очень маленького фрагмента кода. он просто скрывает '.top_menu', если он открыт или переключает его, если щелкнуть« .menu_user ». И как это делают другие. –

0

Вы можете сделать событие щелчка, и внутри него проверьте, был ли щелчок внутри div menu_user. Если нет, вы можете скрыть раскрывающееся меню.

$("body > div").click(function() { 
    if ($(this).attr("class") != "menu_user") { 
     $(".top_menu").hide(); 
    } 
}); 
Смежные вопросы