Podobny do this question, ale o krok dalej. Chciałbym wykryć kliknięć poza zestaw elementów, które ja magazynowe w następujący sposób:Wykryj kliknięcie elementu zewnętrznego?
$('#menu div').live('click', function() {
// Close other open menu items, if any.
// Toggle the clicked menu item.
$('body').one('click', function(event) {
// Hide the menu item.
event.stopPropagation();
});
});
To działa jak czar, niestety, kiedy kolejna pozycja menu jest otwarte i drugi kliknięciu wymaga dwóch kliknięć, aby otworzyć drugi element. Pierwsze kliknięcie ukrywa pierwszy element menu, który był otwarty, a drugie pokazuje drugie menu pozycji .
„poprawny” zachowanie działa w następujący sposób:
- Kliknięcie pozycji menu otwiera.
- Kliknięcie tego samego elementu menu (lub jego elementów podrzędnych) powoduje jego zamknięcie.
- Kliknięcie innego elementu menu zamyka pierwszy, otwiera drugi.
- Kliknięcie z (otwartymi) elementami menu powoduje ich zamknięcie.
Próbowałem następujących w miejsce powyżej $('body').one()
aby ignorować kliknięcia pozycji menu z niewielkim sukcesem:
// Captures click on menu items in spite of the not.
$('*').not('#menu *').one('click', function() { // Hide menu }
$('*:not(#menu)').one('click', function() { // Hide menu }
Jak zawsze, dzięki za pomoc!
Jaki jest cel przesuwając kliknij 'organ do spraw obsługi poza kliknij menu obsługi? Wygląda na to, że wykonuje to samo zadanie (bez konieczności przechwytywania każdego kliknięcia, jeśli menu nigdy nie jest otwierane) przez zastosowanie go po otwarciu pozycji menu. Czy może czegoś brakuje? – chuckg
To jest sprawiedliwy punkt; Uważam, że narzut związany z wiązaniem i odłączaniem zdarzenia, gdy użytkownik kliknie element menu, jest niepotrzebny. Zwykle nie ma wiele klikania na stronie poza przejściem na inną stronę, w takim przypadku dodatkowy moduł obsługi kliknięć jest zupełnie nieistotny. Na koniec dnia oba są w porządku w zależności od twoich potrzeb, więc możesz trzymać się jednego przewodnika, jeśli pasuje on do twoich potrzeb. –
e.target nie działa na IE ... –