Nachdem ich eine kürzlich beantwortete Frage gelesen habe, ist mir unklar, ob ich den Unterschied zwischen mouseenter()
und wirklich verstehe mouseover()
. Die Post sagt
MouseOver ():
Wird beim Betreten eines Elements und immer dann ausgelöst, wenn Mausbewegungen innerhalb des Elements auftreten.
MouseEnter ():
Wird beim Betreten eines Elements ausgelöst.
Ich habe mir eine Geige ausgedacht , die beide verwendet, und sie scheinen ziemlich ähnlich zu sein. Kann mir bitte jemand den Unterschied zwischen den beiden erklären?
Ich habe auch versucht, die JQuery-Definitionen zu lesen, beide sagen dasselbe.
Das Mouseover-Ereignis wird an ein Element gesendet, wenn der Mauszeiger das Element betritt
Das Mouseenter-Ereignis wird an ein Element gesendet, wenn der Mauszeiger das Element betritt.
Kann jemand bitte mit einem Beispiel klären?
quelle
Antworten:
Sie sehen das Verhalten, wenn Ihr Zielelement untergeordnete Elemente enthält:
http://jsfiddle.net/ZCWvJ/7/
Jedes Mal, wenn Ihre Maus ein untergeordnetes Element betritt oder verlässt,
mouseover
wird dies ausgelöst, jedoch nichtmouseenter
.quelle
mouseleave
Ereignis: jsfiddle.net/ZCWvJ/232 jsfiddle.net/ZCWvJ/233 mehr als wäre die Summe Wenn darüber , wo die gleichen wie eingeben + Urlaubs, dann die Zählung die Zählungen für betreten und verlassen.var n = + el.text();
statt zu schreibenvar n = el.text();
? Ich bitte nur um Neugier.+
Operator, um die zurückgegebene Zeichenfolgeel.text()
in eine Zahl zu zwingen . Habe ich brauche zu? Nein. In diesem Fall würde die nächste verwendete Anweisungn
sie auch zu einer Zahl zwingen. Also, warum habe ich es benutzt? Ich bin mir nicht sicher ... das war vor 2 Jahren. Es ist eine gute Angewohnheit. Es macht meine Absicht explizit. Wahrscheinlich hatte ich ursprünglichn + 1
vor dem Speichern, aber beschlossen, meinen Code um 2 Zeichen zu verkleinern und nur zu verwenden++n
.n + 1
würde nichtn
zu einer Zahl zwingen , sondern1
zu einer Zeichenfolge, die zur Ausgabe von z0111111
.Dies ist eines der besten Beispiele, die ich gefunden habe:
http://bl.ocks.org/mbostock/5247027
quelle
Obwohl sie auf die gleiche Weise funktionieren, wird das
mouseenter
Ereignis nur ausgelöst, wenn der Mauszeiger in das ausgewählte Element eintritt . Dasmouseover
Ereignis wird ausgelöst, wenn ein Mauszeiger auch untergeordnete Elemente eingibt .quelle
Siehe den Beispielcode und die Demo am Ende der jquery-Dokumentationsseite:
http://api.jquery.com/mouseenter/
quelle
Das Mouseenter- Ereignis unterscheidet sich vom Mouseover in der Art und Weise, wie es mit Ereignisblasen umgeht . Das mouseenter- Ereignis löst seinen Handler nur aus, wenn die Maus das Element betritt, an das sie gebunden ist, und keinen Nachkommen . Siehe: https://api.jquery.com/mouseenter/
Das Mouseleave- Ereignis unterscheidet sich vom Mouseout in der Art und Weise, wie es mit dem Sprudeln von Ereignissen umgeht . Das Mouseleave- Ereignis löst seinen Handler nur aus, wenn die Maus das Element verlässt, an das sie gebunden ist, und keinen Nachkommen . Siehe: https://api.jquery.com/mouseleave/
quelle
Dieses Beispiel zeigt den Unterschied zwischen den Ereignissen mousemove , mouseenter und mouseover :
https://jsfiddle.net/z8g613yd/
HTML:
CSS:
JS:
onmousemove
: tritt jedes Mal auf, wenn der Mauszeiger über das div-Element bewegt wird.onmouseenter
: tritt nur auf, wenn der Mauszeiger das div-Element betritt.onmouseover
: tritt auf, wenn der Mauszeiger in das div-Element und seine untergeordneten Elemente (p und span) eingeht.quelle
<script>
verschobenAlte Frage, aber immer noch keine gute aktuelle Antwort mit Insight Imo.
Heutzutage unterstützen alle Browser
mouseover/mouseout
undmouseenter/mouseleave
. Trotzdem registriert jQuery Ihren Handler nicht beimouseenter/mouseleave
, sondern legt ihn stillschweigend auf einen Wrapper,mouseover/mouseout
wie der folgende Code zeigt, und interpretiert ihn leicht andersmouseenter/mouseleave
.Das genaue Verhalten von Ereignissen ist besonders für „Delegate-Handler“ relevant. Leider hat jQuery auch eine andere Interpretation dessen, was Delegiertenhandler sind und was sie für Ereignisse erhalten sollten. Diese Tatsache wird in einer anderen Antwort für das einfachere Klickereignis gezeigt.
Wie kann man also eine Frage zu jQuery richtig beantworten, das Javascript-Formulierungen für Ereignisse und Handler verwendet, aber beide unterscheidet und dies in seiner Dokumentation nicht einmal erwähnt?
Zuerst die Unterschiede in "echtem" Javascript:
enter/over
bekommt eine entsprechendeleave/out
(möglicherweise spät / nervös)mouseenter/mouseleave
mouseover/mouseout
Nach einigen Tests zeigt sich, dass die Emulation unnötig, aber vernünftig ist, solange Sie jQuery nicht verwenden, um Handler mit Selektorregistrierung zu delegieren: Sie filtert
mouseover/mouseout
Ereignisse heraus, die amouseenter/mouseleave
nicht erhalten würde. Das Ziel ist jedoch durcheinander. Der Realmouseenter/mouseleave
würde das Handler-Element als Ziel angeben, die Emulation könnte Kinder dieses Elements anzeigen, dh was auch immer dasmouseover/mouseout
getragen wird.Code-Snippet anzeigen
quelle