在外面的任何地方点击时隐藏元素

时间:2012-10-29 20:26:14

标签: jquery

是的,之前已经问过这个问题,但它没有解决我的问题。

所以考虑一下这种情况,比如说我有一个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/

2 个答案:

答案 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;

参考:http://api.jquery.com/closest/