2010-08-17 83 views
0

即时通讯使用的元素在下面点击功能:如何告诉jquery选择一个父元素,但不是它的子元素?

$('#extras').toggle(function() { 
        $('div#extras').show(); 
        $('div#extras').stop().fadeTo('fast', 1); 
       }, 
       function() { 
        $('div#extras').stop().fadeTo('fast', 0, function() { 
                  $(this).hide(); 
                  }); 
       } 
); 

群众演员是一个div,里面有许多儿童。有些是按钮。现在,每次点击其中一个按钮时,都会让父div与子女一起消失。

我该如何做到这一点点击功能只会触发如果父母被点击,而不是所有的孩子?

谢谢:)

回答

1

当你点击一个元素时,所有父元素的点击事件将被触发。这可以通过从儿童的事件处理程序返回false来停止。因此,您需要为所有不应触发div的click事件并从它们返回false的所有孩子设置事件处理程序。事情是这样的:

$("#id-of-button-inside-your-div").click(function() { 
    //Do whatever you need to do 
    return false; 
}); 
+0

好的事情是'额外'是一个工具栏,所以它的一切基本上都做了些什么:)谢谢很多!我现在试试吧 – cat 2010-08-17 14:53:09

+0

哦,哇,它变得非常复杂的原因,我必须做到这么多事情...如果theres任何其他方式,你可以认为这将是伟大的 – cat 2010-08-17 15:01:45

0

尝试使用children()方法。

$('div#extras').children().show(); 
1

如果您隐藏父母,您将默认隐藏子女(子女)。

只是为了完整性:选择当前元素的父是$(this).parent();

+0

我知道它会隐藏它,如果父母被隐藏。我的意思是,如果我单击extras div中的一个按钮,应该做一些完全不同的事情,它会做它应该做的事情,然后让一切消失,因为我点击的内容是在extras div内。 我希望能够使按钮做适当的功能,它不会消失,除非单独选择父(额外)。不是它的孩子。 &谢谢:)我现在试试看 – cat 2010-08-17 14:27:23

0

如果div消失,它的所有内容就会消失。如果您必须让父母在没有孩子的情况下消失,您应该将外面的孩子放在DOM中,并且如果需要,可以使用CSS将其视为内部。

+0

那不是我的意思对不起,我觉得我不够清楚。我在上面的问题中解释了更多:) – cat 2010-08-17 14:28:47

0

试试这个:

$('div#extras').find('*').click(function(event){ event.stopPropagation(); }); 

这将使格内的所有元素忽略来自DIV的click事件。

+0

这是有点工作。 它确实取消了所有孩子的extras div的功能,但它完全取消了它,所以即使您只点击extras div也不会执行任何操作。 虽然谢谢! – cat 2010-08-17 16:21:28

+0

然后你可以使用它,然后重新绑定内部div的click事件,或者可以使用live事件。 – NicolasT 2010-08-17 17:24:31

相关问题