2012-04-21 4 views
2
<a href="/somewhere" onmouseout="someFunction()">blah blah blah<img src="blah.jpg"></a> 

Dans le lien ci-dessus, j'ai someFunction() lorsque la souris quitte le lien. Semble simple. Mais lorsque je survole l'image 'blah.jpg', l'événement onmouseout se déclenche également. Ce n'est pas souhaitable parce que 'blah.jpg' est en fait dans le noeud a. La même chose se produit si j'ai un div à l'intérieur du nœud a, ou tout autre élément html autre que le texte direct: javascript considère que ceci est sur du nœud a. Existe-t-il un moyen d'empêcher ces événements de déclencher incorrectement? Le comportement décrit est en chrome et ff sur win7.comportement onmouseout en js et html

* Mise à jour: s'il y a une solution jquery, ne dites

+0

On dirait que vous voudrez peut-être 'onmouseup' à la place ... – DanS

+2

Pourquoi serait-événement lié cliquez comme 'mouseup' aide l'OP quand il essaie d'utiliser' mouseout'? –

+0

Peut-être évaluer si le «mouseout» est déclenché en passant à un «childNode»? Je ne suis pas sûr exactement comment, cependant, en JavaScript simple. –

Répondre

0

Similaire dans le concept à Shehzad, alors je l'ai voté. Devrait fonctionner cross-browser. en html:

onmouseout='out(this)' 

dans js (avec fichier jquery inclus):

out(thisRef) { 
    var newHover = event.relatedTarget || event.toElement; 
    if(!jQuery.contains(thisRef,newHover) && !(thisRef==newHover)) { 
     someFunction(); 
    } 

}

2

Vous pouvez le faire en vérifiant le type de noeud. Essayez

onmouseout="if ((event.relatedTarget || event.toElement) == this.parentNode) someFunction()" 
+0

Cela fonctionnera très probablement, mais devrait vraiment aller dans son propre gestionnaire. L'avoir dans un attribut 'on-'me donne des cauchemars. –

+0

En outre, ce n'est certainement pas cross-navigateur. –