コードをシンプル、クリーン、効率的に保つために、ul
それぞれに同じ ID を付けています。li
スクリプト関数を適用すると、最初の にのみ適用されますli
。
li
ホバリングされている に関数を適用するにはどうすればよいですか?
ありがとうございました
コードをシンプル、クリーン、効率的に保つために、ul
それぞれに同じ ID を付けています。li
スクリプト関数を適用すると、最初の にのみ適用されますli
。
li
ホバリングされている に関数を適用するにはどうすればよいですか?
ありがとうございました
同じ ID を持つ要素が複数あるのは正しくありません。document.getElementById は、id を持つ要素が 1 つしかないという事実に依存しているため、期待どおりの動作をしません。id の代わりに class を使用するようにコードを変更する必要があります。
または、代わりに、id に関する仮定を行わない querySelector を使用することもできます。
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';
}
また、open 関数と close 関数にイベントを渡すようにしてください。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
。
ここにデモがあります:http://jsfiddle.net/GfqDj/11/