gpt4 book ai didi

javascript - 如何确保可点击对象不会传播到错误的元素?

转载 作者:行者123 更新时间:2023-11-30 20:01:42 26 4
gpt4 key购买 nike

涉及的语言:HTML、CSS、JS

背景:我是网络开发的新手。我有两个相互重叠的元素。一个是 slider ,一个是 div。 slider 位于 div 的顶部。

代码片段:

<div id="myDiv">
<input id="mySlider" type="range" min=1 max=100 step=1>
</div>

initListeners() {
document.getElementById("myDiv").addEventListener("click", divFunction);
document.getElementById("mySlider").addEventListener("input", sliderFunction);
}

我需要让它在您单击 slider 时不会单击 div。我该怎么做呢?我试过 z-index,但这似乎没有任何改变。

提前致谢!

最佳答案

我相信您现在已经明白了,默认情况下,JavaScript 中的事件会从子级向上冒泡到父级。您需要在子级别阻止这种情况发生,也称为防止传播。

使用 stopPropagation函数,您可以按如下方式处理:

function sliderFunction(e) {
e.stopPropagation();
}

简单。该事件将不再到达父级。

编辑

虽然停止传播是正确的使用方法,但事件监听器的类型也必须匹配。因此, slider 和父 DIV 都必须具有 click 事件监听器(而不是 inputclick)。 stopPropagation 停止特定类型事件的传播。

function divFunction() {
console.log('DIV clicked!');
}

function sliderFunction(event) {
event.stopPropagation();
console.log('Slider clicked!');
}

function initListeners() {
document.getElementById('myDiv').addEventListener('click', divFunction);
document.getElementById('mySlider').addEventListener('click', sliderFunction);
}

initListeners();
/* unnecessary visual aides */

body *:not(label) {
padding: 2rem;
outline: 1px solid red;
position: relative;
}

label {
display: inline-block;
position: absolute;
background: #222;
color: #fff;
top: 0; left: 0;
}
<div id="myDiv">
<label>#myDiv</label>
<div id="tools">
<label>#tools</label>
<input type="range" id="mySlider">
</div>
</div>

关于javascript - 如何确保可点击对象不会传播到错误的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53306094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com