2010-08-09 13 views

Trả lời

17
$(document.body).click(function(e){ 
    var $box = $('#little-pop-up-box-id'); 
    if(e.target.id !== 'little-pop-up-box-id' && !$.contains($box[0], e.target)) 
     $box.remove(); 
}); 

e.targetDOM node quan tiếp nhận click event. Tôi đang kiểm tra trước tiên nếu ID của phần tử đó là không phải là mà chúng tôi đang tìm kiếm.

Séc thứ hai !$.contains($box[0], e.target) đảm bảo rằng DOM node of invocation không phải là trong phần phần tử chúng tôi muốn ẩn.

Vâng, tôi đoán đó là thời gian của plugin! :

(function($){ 
    $.fn.outside = function(ename, cb){ 
     return this.each(function(){ 
     var $this = $(this), 
       self = this; 
     $(document.body).bind(ename, function tempo(e){ 
      if(e.target !== self && !$.contains(self, e.target)){ 
       cb.apply(self, [e]); 
       if(!self.parentNode) $(document.body).unbind(ename, tempo); 
      } 
     }); 
     }); 
    }; 
}(jQuery)); 

tóm tắt

$('#container').outside('click', function(e){ 
    $(this).remove(); 
}); 

Ví dụ:

http://www.jsfiddle.net/qbDKN/30/

+0

Đây là một giải pháp tốt - chỉ hai ý kiến ​​nhanh chóng mặc dù. Nó có lẽ sẽ có ý nghĩa để cache hộp $ var bên ngoài trình xử lý nhấp chuột để tránh truy vấn lại (mặc dù một truy vấn giá rẻ). Và nếu bạn đang sử dụng phiên bản 1.3.2+ của jQuery,! $ (E.target) .closest ('# little-pop-up-box-id'). Length sẽ làm cho điều kiện ngắn gọn hơn./nitpicking – jmar777

+0

ACHHHH !! TEH CHAIN ​​- IT'S BROKEN! (bằng không ... vị ngọt, +1). Ngoài ra ... chữ 'click' có được thay thế bằng chữ cái var không? – jmar777

+0

@ jmar777: đúng, cố định: p. Tôi cũng đã thêm một '.unbind()' .. Vâng, tôi đoán điều này có thể được tối ưu hóa ở một số nơi. Thậm chí có thể sử dụng '.delegate()'. Ai f ** k cần Ben Alman? :) j/k – jAndy

0

Grab toàn cầu sự kiện nhấp chuột, hoặc thiết lập div minh bạch 100%/100% theo các cửa sổ pop-up hộp với sự kiện như vậy.

4

giải pháp @ jAndy là tốt, nhưng tôi cũng muốn đề cập đến Ben Alman's "Outside Events" plugin. Dưới đây là một ví dụ nhanh sử dụng nó:

$("#popup").bind("clickoutside", function(event){ 
    $(this).hide(); 
}); 
0
$("html").click(function(){ 
//close popup 
}); 
Các vấn đề liên quan