当用户点击页面除弹出框区域以外的任何地方,我想关闭页面上的一个小弹出框。如何找到它?
$(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.target
是接收了点击事件的 DOM 节点
。我首先检查该元素的 ID
是否不是我们要查找的元素。
第二个检查 !$.contains($box[0], e.target)
确保 调用的 DOM 节点
不在我们想要隐藏的元素内部。
好了,我想现在是插件时间了!:
(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));
简介
$('#container').outside('click', function(e){
$(this).remove();
});
例子:
@jAndy的解决方案很好,但我也想提一下Ben Alman的“外部事件”插件。以下是使用它的快速示例:
$("#popup").bind("clickoutside", function(event){
$(this).hide();
});
$("html").click(function(){
//close popup
});
获取全局点击事件,或在弹出框下方设置透明的100%/100%的div,并带有该事件。
.unbind()
..好吧,我想这可以在几个地方进行优化。也许使用.delegate()
是个好主意。谁需要Ben Alman?:)开玩笑 - jAndy