javascript - eventListener 和封闭元素

标签 javascript html

有一段代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Events Examples</title>
    <style>
        ul {
            width: 200px;
            height: 200px;
            margin: 10px;
            background-color: #ccc;
            float: left;
        }

        .highlight {
            background-color: red;
        }
    </style>
</head>
<body>
<ul id="list">
    <li>First</li>
    <li>Second</li>
    <li>Third</li>
</ul>
<script>
    const ul = document.querySelector('#list');
    ul.addEventListener('mouseover', highlight);
    ul.addEventListener('mouseout', highlight);

    function highlight(event) {
        console.log(event.target);
        event.target.classList.toggle('highlight');
    }
</script>
</body>
</html>

启动后是这样的:

enter image description here

我对听众的期望。当我将鼠标移到“ul”的灰色区域时,highlight() 函数应该可以工作。好吧,它工作正常。我不明白的是:当我将鼠标移到“li”元素上时,highlight() 会因未知原因再次工作。如何修复? 我是 JS 的新手,我还没有找到所描述问题的答案。

enter image description here enter image description here

最佳答案

如果你说你只想突出显示整个区域,那么使用 "mouseenter""mouseleave" 代替,this 引用元素。

那么就没有事件冒泡问题需要处理了。

const ul = document.querySelector('#list');
ul.addEventListener('mouseenter', highlight);
ul.addEventListener('mouseleave', highlight);

function highlight(event) {
  this.classList.toggle('highlight');
}
ul {
  width: 200px;
  height: 200px;
  margin: 10px;
  background-color: #ccc;
  float: left;
}

.highlight {
  background-color: red;
}
<ul id="list">
  <li>First</li>
  <li>Second</li>
  <li>Third</li>
</ul>

关于javascript - eventListener 和封闭元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47858630/

相关文章:

html - 浏览器如何处理没有 html 标记的 html 页面?

javascript - Bootstrap 导航栏汉堡菜单无法打开

javascript - 使用 vue.js 显示 json 结果

JavaScript : How to get a name of an element index?

javascript - 简单的 jQuery addClass() 似乎不起作用

javascript - 从节点确定文档顺序

Jquery 选择当前元素

html - 在 html 中嵌入 flash

javascript - Algolia Search api 最多返回 1000 条记录,而我的总记录约为 50000 条

javascript - 下面的代码会在 d3.js 中产生垂直反向文本