父类的jQuery单击事件,但find子(单击)元素
比方说,我有一个父元素,它有很多嵌套的子元素:
<div id="p"> <div id="c1"> <div id="c2"></div> <div id="c3"></div> </div id="c4"> <div id="c5"></div> </div> </div>
我已经在父级上绑定了一个click
事件:
$('#p').bind('click', function() { alert($(this).attr('id')); });
因为事件被分配给父元素,我总是看到父母的ID,但是,我想知道是否有任何可能的方法来找出哪些这些子元素已被点击?
我也不能将任何事件分配给子元素或从父div中删除事件侦听器。
你需要传递事件对象来获取触发事件的项目,event.target会给你的源元素。
现场演示
$('#p').bind('click', function(event) { alert(event.target.id); });
要么
现场演示
$('#p').bind('click', function(event) { alert($(event.target).attr('id')); });
编辑
为了性能,简单性和可读性,第一个方法event.target.id
优于第二个$(event.target).attr('id')
。
你可以尝试下面的代码。 也试试jsfiddle(演示)。
$('#p').on('click', function(event) { alert(event.target.id); });
尝试演示
第二个问题的答案是,您可以将事件分配给孩子,并从其父母中移除。 看一下这个。
.stopPropagation();
防止事件冒泡DOM树,阻止任何父处理程序被通知事件。 阅读更多
如果您只想执行特定事件并且不允许其他事件被触发,请使用以下代码
event.stopImmediatePropagation()
保持处理程序的其余部分不被执行,并防止事件冒泡DOM树。 阅读更多
我希望这会解决你的问题。 如果您有任何问题,请不要犹豫,问。 谢谢
如果你的分子有孙子,还有一个更好的方法来得到孩子。 注意大于号。
$('.parent > .child').click(function() { // This will be the child even if grandchild is clicked console.log($(this)); });