阻止 DIV 的子级触发事件
Stop children of a DIV from firing events
>我有以下DOM结构:
<div onclick="function">
<element1 />
<element2 />
<element3 />
....
</div>
当我单击任何一个元素时,event.target
就是该元素。
我想总是得到div 作为event.target
.有没有办法阻止孩子们开火事件?
注意:这个问题不是这个问题的重复。因为这个问题中提出的完全是另一种方式。
如果始终需要事件侦听器附加到的元素,则访问事件对象上的 currentTarget
属性,event.currentTarget
,而不是 event.target
。
currentTarget
属性是事件侦听器当前附加到的元素(在您的情况下,该元素是具有 onclick
属性的div
(。
<div onclick="clickHandler(event)"></div>
function clickHandler(event) {
console.log('Event is attached to: ', event.currentTarget);
console.log('The element clicked was: ', event.target);
}
此外,如果将 this
关键字作为参数传递,它也会引用该元素。您可以使用 .call()
方法在函数回调中设置 this
的值。
将onclick
属性更新为以下内容:
<div onclick="clickHandler.call(this, event)"></div>
然后,函数的 this
关键字将引用该div
元素,event
将作为第一个参数传递:
function clickHandler(event) {
console.log('Event is attached to: ', event.currentTarget);
console.log('The element clicked was: ', event.target);
console.log('"this" refers to: ', this);
}
演示这一点的示例:
div { border: 1px solid; height: 200px; width: 200px; }
<script>
function clickHandler(event) {
console.log('Event is attached to: ', event.currentTarget);
console.log('The element clicked was: ', event.target);
console.log('"this" refers to: ', this);
}
</script>
<div onclick="clickHandler.call(this, event)">
<span>'event.currentTarget' is the div</span>
<span>'this' is also the div</span>
</div>
有没有办法阻止孩子们开火事件?
您可以检查event.target
是否event.currentTarget
。
在下面的代码片段中,当单击子元素外部时,if
语句将为真,当直接单击子元素时,该语句将为假:
function clickHandler(event) {
if (event.target === event.currentTarget) {
// ...
}
}
基本示例:
div { border: 1px solid; height: 200px; width: 200px; }
<script>
function clickHandler(event) {
console.log(event.target === event.currentTarget);
}
</script>
<div onclick="clickHandler(event)">
<span>Click outside of a span</span>
<span>Another span</span>
</div>
您可以在处理程序中传递带有this
的容器div,将返回f
:
<div id="f" onclick="f(this)">f
<div id="1">1</div>
<div id="2">2</div>
<div id="3">3</div>
</div>
function f(el) {
alert(el.id)
}
演示 - 小提琴
孩子们将触发事件。但是,如果没有这些事件的函数,它将转到父级。
您可以停止事件传播到父对象。但在不同的浏览器中是不同的。我编写了一个函数来尝试停止所有浏览器中的事件传播。你可以从捕获事件的 javascript 函数调用它。此外,返回假;在捕获事件的函数中。
function cancelEvent(e)
{
e = e ? e : window.event;
if(e.stopPropagation)
e.stopPropagation();
if(e.preventDefault)
e.preventDefault();
e.cancelBubble = true;
e.cancel = true;
e.returnValue = false;
return false;
}
相关文章:
- 可以't触发容纳在其内部的扩展DIV内部的事件's”;触发DIV”;
- JQuery将侦听事件添加到.rezable(),然后附加DIV's
- ContentEditable Div模糊事件
- 如何使鼠标事件仅适用于外部DIV
- jQuery将更改事件绑定到几个DIV's,但已选定
- 使用jQuery库将Click事件附加到DIV
- 使用 jquery 在特定 DIV 中滚动事件
- DIV未触发的点击事件
- jQuery 悬停/单击事件位于同一 DIV(移动设备)上
- 使用 JavaScript 鼠标事件拖动 DIV 会快速移动
- 如何将来自外部 PHP 页面的内容包含在带有 onlick 事件的 DIV 中
- DIV 和更改内容的事件侦听器
- 动态添加 DIV 并附加事件
- 从单个 Div 元素中删除单击事件
- 如何使用单个按钮执行单击事件以选择不同的 DIV
- 阻止 DIV 的子级触发事件
- 使用 stopPropagation 时,父 DIV 上发生的 jQuery 点击事件
- 将 jQuery 事件绑定到 DIV 与特定的 HTML 标签,如 TEXTAREA
- 如果 Div 放置在 img 标记的顶部,则不会在 Div 上触发鼠标关闭事件 - 问题仅在 IE 中
- DIV通过“;点击“;带有事件处理程序