2013-01-24 82 views
0

我有一个DIV(sel_optn1)和我显示sel_optn1李(opt1) 的点击和隐藏sel_optn1sel_optn1侧点击。
它工作正常,但如果我点击sel_optn1的孩子,它是隐藏的。jQuery的隐藏的div点击不包括其子格

我只想对出侧点击隐藏sel_optn1,而是从隐藏sel_optn1

看到这个例子我试图http://jsbin.com/ahuyak/1/edit

任何一个可以帮助我实现这个排除sel_optn1孩子的点击。

+0

看到这个:http://help.dottoro.com/ljgfjsxd.php – karaxuna

+0

看到这个:http://jsbin.com/ahuyak/7/edit – Anujith

回答

4

更新您的检查功能,检查其子元素的点击次数,以及:

if(e.target.className !== "sel_optn1" && !$(e.target).parents('.sel_optn1').length) 
+0

如果我有n个孩子,该怎么办? –

+0

然后,您需要检查点击是否在具有sel_optn1父/祖的元素上:'if(e.target.className!==“sel_optn1”&&!$(e.target).parents('。 sel_optn1')。length)' – kayen

+0

是的,它的工作,非常感谢。 –

0

只是检查,如果点击的目标是在元素

if(e.target.className !== "sel_optn1" && !$.contains($(".sel_optn1")[0], e.target)) 
{ 
    $('.sel_optn1').css({"display":'none'}); 
} 
0
div(sel_optn1).children().click(function(){stopPropagation ();}) 
+0

如何处理我,如果有儿童事件?太。 –

+0

这是针对sel_optn1的儿童的,但这并不意味着您无法单独为儿童举办活动。 – Rajiv007

0

您可以尝试blur代替:http://jsbin.com/ahuyak/12/edit

$(document).ready(function(){ 
    $("#opt1").click(function(e){ 
    $('.sel_optn1 , :text').show(); 
    e.stopPropagation(); 
    }); 

    $('.sel_optn1 > :text').blur(function(e){ 
     $('.sel_optn1 , :text').hide(); 
     e.stopPropagation(); 
    }); 
}); 
0

我绑定在文档单击事件,并检查是否被点击的对象是.sel_optn1,然后我绑定在文档单击事件,如果它.sel_optn1或任何其子女的检查它的目标,不要隐藏它:

$(document).ready(function(){ 
    var option = $(".sel_optn1"); 

    $("#opt1").click(function(e){ 
    e.stopImmediatePropagation(); 
    option.toggle(); 
    }); 

    $(document).click(function(e){ 
    var target = $(e.target); 
    if(!(target.is(option) || option.find(target).length)){ 
     option.hide(); 
    } 
    }); 
}); 

和演示: http://jsbin.com/ahuyak/15/