Hinweis: Äquivalent ist mouseoverund Äquivalent zu mouseleaveist mouseenter.
Andrew
Antworten:
101
Das Mouseleave-Ereignis unterscheidet sich vom Mouseout in der Art und Weise, wie es mit dem Sprudeln von Ereignissen umgeht. Wenn in diesem Beispiel Mouseout verwendet würde, würde der Handler ausgelöst, wenn der Mauszeiger aus dem inneren Element herausbewegt würde. Dies ist normalerweise ein unerwünschtes Verhalten. Das Mouseleave-Ereignis hingegen löst seinen Handler nur aus, wenn die Maus das Element verlässt, an das sie gebunden ist, und keinen Nachkommen. In diesem Beispiel wird der Handler ausgelöst, wenn die Maus das äußere Element verlässt, nicht jedoch das innere Element.
Die obige Erklärung wird viel klarer, wenn ich sehe, dass beide Methoden funktionieren und der Unterschied zwischen ihnen für mich funktioniert hat.
invinciblemuffi
15
Es kann Zeiten geben, in denen mouseouteine bessere Wahl ist als mouseleave.
Angenommen, Sie haben einen Tooltip erstellt, der neben einem Element angezeigt werden soll mouseenter. Sie verwenden setTimeoutdiese Option, um zu verhindern, dass der Tooltip sofort angezeigt wird. Sie löschen das Zeitlimit bei der mouseleaveVerwendung. clearTimeoutWenn die Maus den Tooltip verlässt, wird er nicht angezeigt. Dies funktioniert in 99% der Fälle.
Angenommen, das Element, an das Sie einen Tooltip angehängt haben, ist eine Schaltfläche mit einem clickEreignis. Nehmen wir außerdem an, dass diese Schaltfläche den Benutzer entweder mit einem confirmoder mit einem alertKästchen auffordert . Der Benutzer klickt auf die Schaltfläche und das alertFeuer. Der Benutzer drückte schnell genug darauf, dass Ihr Tooltip keine Chance hatte, aufzutauchen (bisher so gut).
Der Benutzer drückt die alertOK-Taste und die Maus verlässt das Element. Da sich die Browserseite jetzt in einem gesperrten Zustand befindet, wird kein Javascript ausgelöst, bis die OK-Taste gedrückt wurde, was bedeutet, dass Ihr mouseleaveEreignis NICHT FEUERT . Nachdem der Benutzer OK gedrückt hat, wird der Tooltip angezeigt (was nicht das ist, was Sie wollten).
Die Verwendung mouseoutin diesem Fall wäre die geeignete Lösung, da sie ausgelöst wird.
Können Sie erklären, warum mouseoutin diesem Fall ausgelöst wird? Wäre der Browser nicht noch gesperrt mouseout?
user31782
10
jQuery API-Dokument:
mouseout
Dieser Ereignistyp kann aufgrund von Ereignisblasen viele Kopfschmerzen verursachen. Wenn sich der Mauszeiger in diesem Beispiel beispielsweise aus dem inneren Element herausbewegt, wird ein Mouseout-Ereignis an dieses Element gesendet, das dann zu Outer rinnt. Dies kann den gebundenen Mouseout-Handler zu ungünstigen Zeiten auslösen. Eine nützliche Alternative finden Sie in der Diskussion zu .mouseleave ().
So mouseleave gilt auch für ein benutzerdefiniertes Ereignis, das aus dem oben genannten Grund entworfen wurde.
mouseover
und Äquivalent zumouseleave
istmouseenter
.Antworten:
Quelle: http://api.jquery.com/mouseleave/
quelle
Es kann Zeiten geben, in denen
mouseout
eine bessere Wahl ist alsmouseleave
.Angenommen, Sie haben einen Tooltip erstellt, der neben einem Element angezeigt werden soll
mouseenter
. Sie verwendensetTimeout
diese Option, um zu verhindern, dass der Tooltip sofort angezeigt wird. Sie löschen das Zeitlimit bei dermouseleave
Verwendung.clearTimeout
Wenn die Maus den Tooltip verlässt, wird er nicht angezeigt. Dies funktioniert in 99% der Fälle.Angenommen, das Element, an das Sie einen Tooltip angehängt haben, ist eine Schaltfläche mit einem
click
Ereignis. Nehmen wir außerdem an, dass diese Schaltfläche den Benutzer entweder mit einemconfirm
oder mit einemalert
Kästchen auffordert . Der Benutzer klickt auf die Schaltfläche und dasalert
Feuer. Der Benutzer drückte schnell genug darauf, dass Ihr Tooltip keine Chance hatte, aufzutauchen (bisher so gut).Der Benutzer drückt die
alert
OK-Taste und die Maus verlässt das Element. Da sich die Browserseite jetzt in einem gesperrten Zustand befindet, wird kein Javascript ausgelöst, bis die OK-Taste gedrückt wurde, was bedeutet, dass Ihrmouseleave
Ereignis NICHT FEUERT . Nachdem der Benutzer OK gedrückt hat, wird der Tooltip angezeigt (was nicht das ist, was Sie wollten).Die Verwendung
mouseout
in diesem Fall wäre die geeignete Lösung, da sie ausgelöst wird.quelle
mouseout
in diesem Fall ausgelöst wird? Wäre der Browser nicht noch gesperrtmouseout
?jQuery API-Dokument:
mouseout
So
mouseleave
gilt auch für ein benutzerdefiniertes Ereignis, das aus dem oben genannten Grund entworfen wurde.http://api.jquery.com/mouseleave/
quelle
Event Mouseout wird ausgelöst, wenn die Maus das ausgewählte Element verlässt und wenn die Maus auch die untergeordneten Elemente verlässt.
Event Mouseleave-Element wird ausgelöst, wenn der Zeiger nur das ausgewählte Element verlässt.
Referenz: W3School
quelle