答案 0 :(得分:1)
具有相同ID的多个Element是不正确的。由于document.getElementById依赖于只有一个带有id的元素,因此它不会按预期执行。您应该将代码更改为使用class而不是id。
或者你可以使用querySelector而不对id:
做出任何假设function openHiddenItems(evt) {
if (evt.target.id !== 'list-item') return;
evt.target.querySelector('#red-square').style.visibility = 'visible';
evt.target.querySelector('#yellow-circle').style.visibility = 'visible';
}
function closeHiddenItems(evt) {
if (evt.target.id !== 'list-item') return;
evt.target.querySelector('#red-square').style.visibility = 'hidden';
evt.target.querySelector('#yellow-circle').style.visibility = 'hidden';
}
还要确保将事件传递给打开和关闭功能。我建议将JS代码和HTML分开:
var elements = document.querySelectorAll('#list-item');
for (var i=0; i<elements.length; i++) {
elements[i].addEventListener('mouseover', openHiddenItems);
elements[i].addEventListener('mouseout', closeHiddenItems);
}
编辑:如果将鼠标悬停在元素变为可见/隐藏的位置,则函数之间会有一个后退。它也可以通过查看当前悬停的元素是否在#list-item
。