Mam więc menu rozwijane, które wyświetla się po kliknięciu, zgodnie z wymaganiami biznesowymi. Menu zostanie ponownie ukryte, gdy odejdziesz od niego myszką.
Ale teraz jestem proszony o pozostawienie go na miejscu, dopóki użytkownik nie kliknie w dowolnym miejscu dokumentu. Jak można to osiągnąć?
To jest uproszczona wersja tego, co mam teraz:
$(document).ready(function() {
$("ul.opMenu li").click(function(){
$('#MainOptSubMenu',this).css('visibility', 'visible');
});
$("ul.opMenu li").mouseleave(function(){
$('#MainOptSubMenu',this).css('visibility', 'hidden');
});
});
<ul class="opMenu">
<li id="footwo" class="">
<span id="optImg" style="display: inline-block;"> <img src="http://localhost.vmsinfo.com:8002/insight/images/options-hover2.gif"/> </span>
<ul id="MainOptSubMenu" style="visibility: hidden; top: 25px; border-top: 0px solid rgb(217, 228, 250); background-color: rgb(217, 228, 250); padding-bottom: 15px;">
<li>some</li>
<li>nav</li>
<li>links</li>
</ul>
</li>
</ul>
Próbowałem czegoś takiego, $('document[id!=MainOptSubMenu]').click(function()
myśląc, że uruchomi to wszystko, co nie jest w menu, ale nie zadziałało.
Odpowiedzi:
Spójrz na podejście zastosowane w tym pytaniu:
Jak wykryć kliknięcie poza elementem?
źródło
Odpowiedź jest prawidłowa, ale doda odbiornik, który będzie uruchamiany za każdym razem, gdy nastąpi kliknięcie na Twojej stronie. Aby tego uniknąć, możesz dodać odbiorcę tylko raz:
Edytuj: jeśli chcesz uniknąć
stopPropagation()
przycisku początkowego, możesz tego użyćźródło
e.stopPropagation()
w Chrome, aby zatrzymać pierwsze zdarzenie od odpalenia wone()
Te
stopPropagation
opcje są złe, ponieważ mogą one kolidować z innymi obsługi zdarzeń oraz innych menu, które mogły załączonych bliskie Wozy do elementu HTML.Oto proste rozwiązanie oparte na user2989143 jest odpowiedź:
źródło
Jeśli w twoim przypadku użycie wtyczki jest w porządku, proponuję wtyczkę clickoutside Bena Almana znajdującą się tutaj :
jego użycie jest tak proste, jak to:
mam nadzieję że to pomoże.
źródło
2 opcje, które możesz zbadać:
źródło
Znalazłem wariant rozwiązania Grsmto, a rozwiązanie Dennisa rozwiązało mój problem.
źródło
Używam tego rozwiązania z wieloma elementami o tym samym zachowaniu na tej samej stronie:
stopPropagation () to zły pomysł, który łamie standardowe zachowanie wielu rzeczy, w tym przycisków i linków.
źródło
$target.closest('#menu-container, #menu-activator').length === 0
Niedawno stanąłem przed tym samym problemem. Napisałem następujący kod:
U mnie zadziałało doskonale.
źródło
a co z tym?
źródło
Uważam, że bardziej przydatne jest użycie zdarzenia kliknięcia myszy zamiast zdarzenia kliknięcia. Zdarzenie kliknięcia nie działa, jeśli użytkownik kliknie inne elementy na stronie ze zdarzeniami kliknięcia. W połączeniu z metodą one () jQuery wygląda to tak:
źródło
nawet ja natknąłem się na tę samą sytuację i jeden z moich mentorów przedstawił mi ten pomysł.
krok: 1 po kliknięciu na przycisk, na którym powinniśmy wyświetlić rozwijane menu. następnie dodaj poniższą nazwę klasy „more_wrap_background” do bieżącej aktywnej strony, jak pokazano poniżej
krok 2, a następnie dodaj kliknięcia znacznika DIV, na przykład
gdzie hideDropDown jest funkcją, która ma zostać wywołana w celu ukrycia menu rozwijanego
Krok-3 i ważny krok podczas ukrywania menu rozwijanego polega na usunięciu tej klasy, którą dodałeś wcześniej, jak
Usuwam używając jego id w powyższym kodzie
źródło
Lepiej jest ustawiać nasłuchiwanie tylko wtedy, gdy menu jest widoczne i zawsze usuwać nasłuchiwanie, gdy menu zostanie ukryte.
źródło
Myślę, że potrzebujesz czegoś takiego: http://jsfiddle.net/BeenYoung/BXaqW/3/
Mam nadzieję, że to dla Ciebie przydatne!
źródło
Użyj selektora „: visible”. Gdzie .menuitem to element (y) do ukrycia ...
Lub jeśli masz już elementy .menuitem w var ...
źródło
To nie musi być skomplikowane.
źródło