我们可以检测一个链接是否在一个有jQuery.click()的DIV中被点击了吗
Can we detect whether a link was clicked within a DIV that has a jQuery.click()?
我想知道是否有一种简单的方法可以检测我想要处理点击的div中出现的链接上的点击。。。
因此,有一个简单的HTML代码示例:
<div class="checkmark">
<div class="box"> </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");
});
这很简单,效果很好("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");
}
});
附言:我不知道标签上是否有锚。因此,必须在click()函数中进行发现(除非有更好的设置,并且"if"可能会以不同的方式发生)。
注意:这里我显示了一个target="blank"
参数。在真正的交易中,我实际上会打开一个弹出窗口,但这在这里并没有什么区别。
这就是event.target
的作用。
例如,在这种情况下:
if($(e.target).is("a")) {
// It was the anchor element that was clicked
}
jsFiddle此处
您只需添加以下处理程序:
jQuery("checkmark a").click(function(e){
e.stopPropagation();
}
它将阻止点击事件从链接冒泡到div,因此链接将被激活,并且事件永远不会到达它将被停止的div。
您可以使用event-deleteTarget属性来查看触发该事件的DOM元素。
if($(e.delegateTarget).is("a"))
// execute code
相关文章:
- 通过DRAGGABLE将一个DIV移动到另一个DIF下?(CSS,JQuery)
- 限制一个DIV出现在另一个特定大小的DIV中
- 使用jQuery将DIV放在另一个DIV上
- 只翻转一个DIV,而不是所有DIV都属于同一类
- 更改另一个 DIV 之前的 DIV 宽度
- JQuery 将一个 Div 值的百分比添加到另一个值
- jQuery - 在另一个 DIV 中定位特定的 DIV
- 选中复选框时仅重新加载一个DIV
- 动态创建一个DIV容器
- 在悬停时显示一个DIV,在悬停的另一个DIV.使用CSS
- 将DIV内容复制到另一个DIV
- 当调用DIV时,将一个DIV加载到另一个的顶部
- 通过点击隐藏DIV,并通过JavaScript显示另一个DIV
- 同时换掉两个Div,换成另一个Div并保持循环一段固定的秒数
- For循环只打印一个DIV标记.不是8个DIV标签
- 切换一个Div与按钮改变左边距属性
- 使用 javascript 在 DOM 中隐藏 DIV 中的文本,具体取决于另一个 DIV 中的文本
- 如何根据另一个 DIV 内容的可见性显示 DIV 内容
- DIV 滚动到达页脚(另一个 DIV)后停止滚动
- JQuery 滚动到滚动到下一个 DIV