Was ist der Unterschied zwischen Mouseover- und Mouseenter-Ereignissen?


152

Ich habe das mouseoverEreignis immer verwendet , aber beim Lesen der jQuery-Dokumentation habe ich gefunden mouseenter. Sie scheinen genau gleich zu funktionieren.

Gibt es einen Unterschied zwischen den beiden und wenn ja, wann sollte ich sie verwenden?
(Gilt auch für mouseoutvs mouseleave).

Antworten:


117

Sie können das folgende Beispiel auf der jQuery-Dokumentseite ausprobieren . Es ist eine nette kleine, interaktive Demo, die es sehr deutlich macht und Sie selbst sehen können.

Kurz gesagt, Sie werden feststellen, dass ein Mouse-Over-Ereignis für ein Element auftritt, wenn Sie sich darüber befinden - entweder von seinem untergeordneten oder seinem übergeordneten Element. Ein Mauseingabeereignis tritt jedoch nur auf, wenn sich die Maus von außerhalb dieses Elements zu diesem Element bewegt.

Oder wie die mouseover()Dokumente es ausdrücken:

[ .mouseover()] kann aufgrund von Ereignisblasen viele Kopfschmerzen verursachen. Wenn sich der Mauszeiger in diesem Beispiel beispielsweise über das innere Element bewegt, wird ein Mouseover-Ereignis an dieses Element gesendet, das dann auf Outer übertragen wird. Dies kann unseren gebundenen Mouseover-Handler zu ungünstigen Zeiten auslösen. In der Diskussion finden Sie .mouseenter()eine nützliche Alternative.


39
Es ist nicht wahr, dass mouseenter"nur auftritt, wenn sich die Maus vom übergeordneten Element zum Element bewegt". Das Ereignis tritt auf, wenn die Maus von außerhalb des Elements zu innerhalb des Elements wechselt. Es spielt keine Rolle, von welchem ​​Element die Maus stammt. Es ist wahr, dass die Maus oft vom Elternteil kommt, aber nicht immer. Wenn der Elternteil beispielsweise keine Polsterung oder Umrandung hat, kann die Maus direkt vom Großelternteil eintreten und mouseenterwird trotzdem feuern. Tatsächlich kann das Element sogar von außerhalb des Ansichtsfensters eingegeben werden (wenn sich das Element direkt am Rand befindet), und das Ereignis wird weiterhin ausgelöst.
Callum

2
DEMO ist die beste Erklärung;)
Luckylooke

Spielen Sie einfach mit der Demo herum.
Kevin Wheeler


4

Wie so oft bei Fragen wie diesen hat Quirksmode die beste Antwort .

Ich würde mir vorstellen, dass die Verwendung eines der beiden Ereignisnamen dasselbe Verhalten auslöst, da eines der Ziele von jQuery darin besteht, die Browserunabhängigkeit zu erhöhen. Edit: dank anderer Beiträge sehe ich jetzt, dass dies nicht der Fall ist


0
$(document).ready(function() {
$("#outer_mouseover").bind
("Mouse Over Mouse Out",function(event){
console.log(event.type," :: ",this.id);})
$("#outer_mouseenter").bind
("Mouse enter Mouse leave",function(event){
console.log(event.type," :: ",this.id);})
 });


Wenn Ihr Element keine untergeordneten Elemente enthält, das Element jedoch untergeordnete Elemente, verhalten sich die Paare ganz anders. Kurz gesagt, wenn Sie Ihre Maus an ein Element und dann an dessen untergeordnetes Element übergeben, wird sowohl Mouseover / Mouseout ausgelöst, während nur Mouseenter ausgelöst wird, da sich Ihre Maus technisch noch im Element befindet.
Langhaus
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.