是的,之前已经问过这个问题,但它没有解决我的问题。
所以考虑一下这种情况,比如说我有一个div叫它container
,现在这个div包含很多的其他各种对象,比如<a>, <img />, <div>, <ul>
你得到了点...
现在,用户可以在该div中执行操作,编写消息等...但是当他点击container
元素之外的任何位置时,它应该消失,这样就很简单了吗?
$(document).on("click", document, function(event){
if($(event.target).is(".container")) return;
$(".container").hide();
});
确实这会起作用,但同时也不行,因为它只会检查目标是否不是container
,如果你点击某个按钮上的说法它也会消失,我可以只包括if
语句中的每一个元素,哦,但就我而言,这将是一个非常长的列表...所以必须有一个更好的方法
是的,我确实尝试使用event.stopPropagation()
但它没有用,我猜是因为我使用的是on
而不是简单的click
事件,请帮我解决此...
我也为你设置了这个小提琴:http://jsfiddle.net/nVfJ5/
答案 0 :(得分:1)
document
始终可用,因此不需要委派的事件处理程序?
只是检查event.target
是否有某个.container
元素作为父元素,如果不隐藏.container
元素:
$(document).on("click", function(e){
if(!$(e.target).closest(".container").length)
$(".container").hide();
});
答案 1 :(得分:1)
使用closest()
方法。根据定义,它从目标开始,并在树上查找匹配项。因此,如果元素是选择器,它将停止。
if($(event.target).closest(".container").length) return;