2012-02-17 32 views
11

nếu tôi có một div tôi đã hiển thị nhờ sự kiện nhấp chuột - một số điều dễ dàng là làm cho nó gần gũi nếu ai đó nhấp vào bất kỳ nơi nào bên ngoài div hoặc truy cập phím esc?Ẩn một div bằng phím esc, và tắt bấm? Trong Jquery

+5

Với> 1K diện bạn nên biết tốt hơn để hỏi một câu hỏi như thế này - bạn đã thử cái gì? –

+0

Liên kết người nghe sự kiện với những sự kiện đó và ẩn div. Xem [Làm cách nào để phát hiện một nhấp chuột bên ngoài một phần tử?] (Http://stackoverflow.com/questions/152975/how-to-detect-a-click-outside-an-element) và [Mã khóa nào cho khóa thoát với jQuery ] (http://stackoverflow.com/questions/1160008/which-keycode-for-escape-key-with-jquery). –

+0

Tôi không có chuyên gia về JavaScript, nhưng điều này sẽ giúp: http://www.javascriptkit.com/jsref/eventkeyboardmouse.shtml. Sử dụng onKeyPress cho esc. Đối với nhấp chuột, có một div trong suốt hoặc một cái gì đó bao gồm toàn bộ trang, với div của bạn trên đầu trang. Đối tượng trong suốt này phải có onClick và nhấp chuột đó sẽ là nhấp chuột đóng. –

Trả lời

45

Ở đây bạn đi ...

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

Live Demo:http://jsfiddle.net/S5ftb/

+0

cảm ơn hoàn hảo! – Elliot

+0

Tại sao nó không hoạt động nếu elem có nhiều lớp nhưng hoạt động nếu tôi thay thế elem trực tiếp với lớp 2 của tôi? – MIke

+0

@MIke Làm thế nào để bạn gán 'elem'? Kiểm tra xem nó thực sự là một tham chiếu đến yếu tố của bạn. –

9

Đối với những người bạn của những người thích vani:

<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

Phần tử chỉ được ẩn nếu nhấp chuột xảy ra * bên ngoài * của phần tử ... –

+0

Yikes, bắt tốt; Tôi sẽ sửa lại. –

+0

Cảm ơn bạn vì giải pháp không jquery! – Philipp

Các vấn đề liên quan