2012-02-17 7 views
11

jeśli mam element div, który pokazałem dzięki zdarzeniu typu kliknięcie - co jest łatwiejsze, aby go zamknąć, gdy ktoś kliknie w dowolnym miejscu poza działem div lub uderza klawisz esc?Ukrywanie elementu div za pomocą klawisza esc i kliknięcie wyłączone? W Jquery

+5

Z> 1K rep należy wiedzieć lepiej niż zadać takie pytanie - co próbowaliście? –

+0

Powiąż odbiornik zdarzeń z tymi zdarzeniami i ukryj element div. Zobacz [Jak wykryć kliknięcie poza elementem?] (Http://stackoverflow.com/questions/152975/how-to-detect-a-click-outside-an-element) i [Który kod klucza Escape z jQuery ] (http://stackoverflow.com/questions/1160008/which-keycode-for-escape-key-with-ququery). –

+0

Nie jestem ekspertem od JavaScript, ale powinno to pomóc: http://www.javascriptkit.com/jsref/eventkeyboardmouse.shtml. Użyj onKeyPress dla esc. Aby uzyskać kliknięcie, użyj przezroczystego elementu div lub czegoś obejmującego całą stronę, z div na górze. Ten przezroczysty obiekt powinien mieć funkcję onClick, a kliknięcie będzie kliknięciem zamykającym. –

Odpowiedz

45

Proszę bardzo ...

$(document).on('click', function (e) { 
    if ($(e.target).closest(elem).length === 0) { 
     $(elem).hide(); 
    } 
}); 

$(document).on('keydown', function (e) { 
    if (e.keyCode === 27) { // ESC 
     $(elem).hide(); 
    } 
}); 

żywo demo:http://jsfiddle.net/S5ftb/

+0

dzięki! – Elliot

+0

Dlaczego nie działa, jeśli elem ma wiele klas, ale działa, jeśli zamieniam elem bezpośrednio na moją 2 klasę? – MIke

+0

@MIke Jak przypisujesz 'elem'? Sprawdź, czy rzeczywiście jest to odniesienie do Twojego elementu. –

9

Dla tych z Was, którzy wolą wanilię:

<div id="div">Click me dude</div> 

<script> 
    d = document.getElementById("div"); 
    d.addEventListener("click",  function(e){e.stopPropagation()},true); 
    addEventListener("click",  function() {d.style.display="none"},false); 
    addEventListener("keypress", function(e){e.keyCode==27 &&(d.style.display="none")},false); 
</script> 
+1

Element powinien być ukryty tylko wtedy, gdy pojawi się kliknięcie * poza * elementu ... –

+0

Yikes, good catch; Sprawdzę. –

+0

Dzięki za rozwiązanie nie-jquery! – Philipp

Powiązane problemy