【发布时间】:2017-05-23 08:28:09
【问题描述】:
为什么点击父 div 元素可以完成这项工作,但点击子 div 文本 Click Me! 返回 undefined 并且页面无法在 iframe 中加载?我用event.stopPropagation 停止冒泡,但它仍然是一样的。当addEvenLisneter 优于内联onclick 时,正确的方法是什么?
var panel = document.getElementsByClassName('panel');
var iframe = document.getElementById('frame');
[].forEach.call(panel, function(each) {
each.addEventListener('click', linkClick);
});
function linkClick ( event ) {
event.stopPropagation();
event.preventDefault();
iframe.src = event.target.dataset.url;
}
.panel {
padding: 20px;
margin: 10px;
border: 1px solid yellow;
}
.panel div {
display: inline;
}
<div class="panel" data-url="https://www.w3schools.com/jsref/event_preventdefault.asp">
<div>Click Me!</div>
</div>
<iframe id="frame"></iframe>
当我console.log(event)气泡属性仍然设置为true。
【问题讨论】:
-
"但点击文本字段" — 什么文本字段?您的示例中没有文本字段。提供真实的minimal reproducible example。
-
对不起,我指的是
divClick Me!中的文字 -
但是我停止在父 div 上冒泡,如果我理解冒泡正确,它不应该在子
div中寻找data-url。 -
嘿,是泡泡,不是石头——泡泡会弹出来!
-
那么我该如何阻止孩子们的问题呢?
标签: javascript addeventlistener event-bubbling