【发布时间】:2021-03-05 11:16:31
【问题描述】:
我有两个按钮,button 1 和 button 2 不同类别的颜色和背景颜色不同。当鼠标悬停 button 1 我希望颜色和背景颜色更改为 button 2 的颜色和背景颜色以及 button 2 更改为 按钮 1 的颜色和背景颜色。同样,当我将鼠标悬停在 按钮 2 上时,也会发生同样的情况。
所以我想出了这个解决方案,但我收到了通知
未捕获的类型错误:btn_primarys.map 不是函数
未捕获的类型错误:btn_secondarys.map 不是函数
const mouseOverBtnPrimary = () => {
btn_primary.classList.remove("btn-primary");
btn_primary.classList.add("btn-secondary");
btn_secondary.classList.add("btn-primary");
btn_secondary.classList.remove("btn-secondary");
}
const mouseOutBtnPrimary = () => {
btn_primary.classList.add("btn-primary");
btn_primary.classList.remove("btn-secondary");
btn_secondary.classList.add("btn-secondary");
btn_secondary.classList.remove("btn-primary");
}
const mouseOverBtnSecondary = () => {
btn_secondary.classList.remove("btn-secondary");
btn_secondary.classList.add("btn-primary");
btn_primary.classList.add("btn-secondary");
btn_primary.classList.remove("btn-primary");
}
const mouseOutBtnSecondary = () => {
btn_secondary.classList.add("btn-secondary");
btn_secondary.classList.remove("btn-primary");
btn_primary.classList.add("btn-primary");
btn_primary.classList.remove("btn-secondary");
}
let projectPage = document.getElementById('projectsPage');
let btn_primarys = projectPage.getElementsByClassName('btn-primary');
btn_primarys.map( btn_primary => btn_primary.addEventListener('mouseover', mouseOverBtnPrimary()));
btn_primarys.map( btn_primary => btn_primary.addEventListener('mouseout', mouseOutBtnPrimary()));
let btn_secondarys = projectPage.getElementsByClassName('btn-secondary');
btn_secondarys.map( btn_secondary => btn_secondary.addEventListener('mouseover', mouseOverBtnSecondary()));
btn_secondarys.map( btn_secondary => btn_secondary.addEventListener('mouseout', mouseOutBtnSecondary()));
【问题讨论】:
-
试试这个:[...btn_primarys].map,其实你不需要map,用forEach代替
-
除非您需要
getElementsByClassname返回的实时 HTMLCollection,否则更喜欢querySelectorAll来检索静态 NodeList。另外,除非您需要返回的数组,否则不要使用map(),而是使用forEach()(它作为 NodeList 上的方法提供,无需将其转换为数组)。
标签: javascript arrays dictionary addeventlistener