我想知道是否有一种简单的方法来检测我想要处理点击的div中出现的链接上的点击...

所以,有一个简单的HTML代码示例:

<div class="checkmark">
    <div class="box">&nbsp;</div>
    <div class="label">Checkbox label possibly <a href="/random" target="_blank">with an anchor</a>.</div>
</div>

所以在这个例子中,我使用一组<div>标签来创建一个复选标记。 “盒子”是我显示一个小方块的地方,当选中时,也会显示复选标记(例如红色十字)。

为了使复选标记按预期工作,我使用jQuery并在主<div>标记上捕获鼠标点击:

jQuery("checkmark").click(function(e){
    e.stopPropagation();
    e.preventDefault();

    jQuery("box", this).toggle("checked");
});

非常简单,效果很好(“已检查”类足以显示复选标记,因为可以使用CSS定义。)

但是,正如我们在示例中所看到的,“标签”包括锚。 如果我单击锚点,我刚刚呈现的jQuery运行,但锚点什么都不做。 如果我删除了stopPropagation()和preventDefault(),则会点击锚点,但也会切换复选标记。

我想知道的是:是否有一种简单的方法来检查传播是否会触发锚点,在这种情况下只是忽略“复选标记”代码中的点击?

像这样的东西:

jQuery("checkmark").click(function(e){
    if(!(anchor.clicked()))  // how do we do this?
    {
        e.stopPropagation();
        e.preventDefault();

        jQuery("box", this).toggle("checked");
    }
});

PS我不知道标签中是否有锚点。 因此,发现必须在click()函数中发生(除非有更好的设置,并且“if”可能以不同的方式发生)。

注意:这里我显示了一个target="blank"参数。 在真正的交易中,我将实际打开一个弹出窗口,但这并没有真正有所作为。

===============>>#1 票数:7 已采纳

这就是event.target的用途。

例如,在这种情况下:

if($(e.target).is("a")) { 
   // It was the anchor element that was clicked
}

jsFiddle在这里

===============>>#2 票数:0

您可以使用事件delegateTarget属性来查看触发事件的DOM元素。

if($(e.delegateTarget).is("a"))
    // execute code

===============>>#3 票数:0

你可以添加这个处理程序:

jQuery("checkmark a").click(function(e){
  e.stopPropagation();
}

它将阻止click事件从链接冒泡到div,因此链接将被激活,并且事件永远不会到达将停止的div。

  ask by Alexis Wilke translate from so

未解决问题?本站智能推荐: