Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery子事件处理_Javascript_Jquery_Html - Fatal编程技术网

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...
        }
    });
});