Javascript jQuery子事件处理
我有一个容器元素。元素中可能有锚定标记,也可能没有锚定标记。我要侦听该元素中的单击事件。我只想处理每次单击一次,但如果单击了锚标记,我想做一些不同的事情 我遇到的问题:Javascript jQuery子事件处理,javascript,jquery,html,Javascript,Jquery,Html,我有一个容器元素。元素中可能有锚定标记,也可能没有锚定标记。我要侦听该元素中的单击事件。我只想处理每次单击一次,但如果单击了锚标记,我想做一些不同的事情 我遇到的问题: 在容器元素级别侦听不会捕获锚定标记单击:$('#ID')。on('click',myFunction) 侦听容器中的每个子级最终会触发多个事件:$('#ID').find(*).on('click',myFunction) 我如何做到这一点?这应该可以: $('#ID').on('click', function(e) {
- 在容器元素级别侦听不会捕获锚定标记单击:
$('#ID')。on('click',myFunction)代码>
- 侦听容器中的每个子级最终会触发多个事件:
$('#ID').find(*).on('click',myFunction)代码>
$('#ID').on('click', function(e) {
if ($(e.target).closest("a").length) {
anchorWasClicked();
} else {
somethingElseWasClicked();
}
});
您可以检查
单击
的目标
。当您试图为容器中的每个元素启用单击一次时,您应该使用.one()
:
这是对我之前在评论中发布的示例的改进。请提供一个完整的示例,并附上标记和演示。第一个应该捕获对任何元素的点击。围绕这些行的东西?我忘记了事件的target
属性。除非锚定标记中有子元素:img
,span
,等等,否则这非常有效。@lucastrezesniewski给出的建议可以放在if
条件中:$(e.target).最近的(“a”).长度
。更简单。好地方,谢谢!我接受了@Lucastzesniewski的回答,因为他早些时候得到了答案。没关系。我只是想帮忙。但是“我只想处理每次点击一次”怎么办?在我的示例中,选择器2触发了多个事件,我知道如果我这样做,我将不得不忽略所有事件,只有一个除外。
$(function() {
$("#container").children().one("click", function(e) {
e.preventDefault(); // For testing purposes.
if ($(e.target).parents().is("a") || $(e.target).is("a")) {
// Anchor.
}
else {
// Others...
}
});
});