2017-08-01 4 views
0

J'ai un ensemble de 3 éléments de menu auxquels j'essaie d'ajouter un événement mouseenter. Je n'arrive pas à le faire fonctionner du tout. J'ai également essayé de boucler la classe .menu-item et rien ne se passe.Événement Mouseenter à défaut de déclencher

Ça me rend fou. Est-ce que quelqu'un sait pourquoi cela ne fonctionne pas?

Un grand merci à l'avance pour toute aide

code

est ci-dessous et le lien Codepen est: https://codepen.io/emilychews/pen/VzaOoe

(Je ne peux pas avoir une solution jQuery).

JS

var menuItem = document.querySelectorAll('.menu-item'); 

    function myMouseEnter() { 

    alert('mouse entered'); 

    } 

menuItem.addEventListener('mouseenter', myMouseEnter, false) 

en commentaire Version utilisation d'une boucle

// function myMouseEnter() { 

//  for(i=0; i < menuItem.length; i++){ 

//  alert ('mouse entered'); 
//  
//  } 

//  } 

// menuItem.addEventListener('mouseenter', myMouseEnter, false) 

CSS

.menu-item { 
padding: 10px; 
font-family: arial; 
} 

HTML

<ul class="unclick--menuitems"> 
    <li class="menu-item item1"><a href="//google.com">About</a></li> 
    <li class="menu-item item2"><a href="//google.com">Work</a></li> 
    <li class="menu-item item3"><a href="//google.com">Contact</a></li> 
</ul> 
+3

'menuItem' est un' HTMLCollection', pour ainsi ajouter des écouteurs dont vous avez besoin pour itérer et ajouter l'auditeur à chaque élément de la collection – MysterX

+0

double possible de [Qu'est-ce querySelectorAll, getElementsByClassName et d'autres getElementsBy \ * méthodes retour?] (https://stackoverflow.com/questions/10693845/what-do-queryselectorall-g etelementsbyclassname-and-other-getelementsby-method) – Teemu

Répondre

1

Vous devez itérer lancer la collection et ajoutez écouteur d'événement sur chaque élément comme celui-ci:

var menuItems = document.querySelectorAll('.menu-item'); 

function myMouseEnter() { 
alert('mouse entered'); 
} 

for(var i=0; i < menuItems.length; i++) { 
    menuItems[i].addEventListener('mouseenter', myMouseEnter, false); 
} 
0

sélecteurs de requête JS renvoie toujours l'élément sous forme de tableau, donc dans votre cas, vous pouvez utiliser quelque chose comme ça ,

var menuItems = document.querySelectorAll('.menu-item'); 

function myMouseEnter() { 
console.log('mouse entered'); 
} 

menuItems[0].addEventListener('mouseenter', myMouseEnter); 
+0

Ce n'est pas un tableau mais un HTMLCollection. La grande différence est que certaines méthodes de tableau (comme forEach) ne fonctionneront pas dessus. – lumio