我有一个div
元素,里面有一个input
元素。我想在点击div
时注册一个事件监听器。它工作正常,但问题是:input
上的“点击”也被检测到,我不想。
document.getElementById("foo").addEventListener('click', function(event) {
alert();
event.stopPropagation();
})
div {
width: 300px;
height: 300px;
background-color: red;
}
<div id="foo">
<input>
</div>
答案 0 :(得分:4)
您在错误的事件中使用event.stopPropagation();
,这就是它无效的原因。 stopPropagation
可防止事件冒泡,因此您需要在子事件中使用它。
试试这个。
document.getElementById("foo").addEventListener('click', function(event) {
if(event.target === event.currentTarget) {
alert();
}
})
&#13;
div {
width: 300px;
height: 300px;
background-color: red;
}
&#13;
<div id="foo">
<input>
</div>
&#13;
答案 1 :(得分:1)
stopPropagation
可防止事件冒泡。阅读有关事件冒泡here的更多信息。因此,您需要将stopPropagation
放在按钮上
document.getElementById("bar")
.addEventListener('click', function(event) {
event.stopPropagation();
})
document.getElementById("foo")
.addEventListener('click', function(event) {
alert();
})
&#13;
div {
width: 300px;
height: 300px;
background-color: red;
}
&#13;
<div id="foo">
<input id="bar">
</div>
&#13;
现在,您可以观察到单击input
时未触发警报。