Ich habe eine <ul>
, die nach dem ersten Laden der Seite mit Javascript gefüllt ist. Ich benutze derzeit .bind
mit mouseover
und mouseout
.
Das Projekt wurde gerade auf jQuery 1.7 aktualisiert, sodass ich die Option verwenden kann .on
, aber ich kann es anscheinend nicht zum Laufen bringen hover
. Ist es möglich , die Verwendung .on
mit hover
?
BEARBEITEN : Die Elemente, an die ich binde, werden nach dem Laden des Dokuments mit Javascript geladen. Deshalb benutze ich on
und nicht nur hover
.
mouseenter
undmouseleave
, wie von calebthebrewer vorgeschlagen.Antworten:
( Sehen Sie sich die letzte Änderung in dieser Antwort an, wenn Sie
.on()
Elemente verwenden müssen, die mit JavaScript gefüllt sind. )Verwenden Sie dies für Elemente, die nicht mit JavaScript gefüllt sind:
.hover()
hat einen eigenen Handler: http://api.jquery.com/hover/Wenn Sie mehrere Dinge tun möchten, verketten Sie sie
.on()
wie folgt im Handler:Entsprechend den unten angegebenen Antworten können Sie
hover
mit verwenden.on()
, aber:Es gibt auch keine Leistungsvorteile bei der Verwendung und es ist sperriger als nur die Verwendung von
mouseenter
odermouseleave
. Die Antwort, die ich gegeben habe, erfordert weniger Code und ist der richtige Weg, um so etwas zu erreichen.BEARBEITEN
Es ist schon eine Weile her, dass diese Frage beantwortet wurde und sie scheint etwas an Zugkraft gewonnen zu haben. Der obige Code steht noch, aber ich wollte meiner ursprünglichen Antwort etwas hinzufügen.
Während ich es vorziehe,
mouseenter
undmouseleave
(hilft mir zu verstehen, was im Code vor sich geht) zu verwenden.on()
, ist es genauso, wie das Folgende mit zu schreibenhover()
Da die ursprüngliche Frage war , wie sie richtig nutzen könnten
on()
mithover()
, dachte ich , ich würde die Nutzung korrigierenon()
und fand es nicht notwendig , den hinzufügenhover()
Code zu der Zeit.EDIT 11. DEZEMBER 2012
Im Folgenden finden Sie einige neue Antworten, die erläutern, wie funktionieren
.on()
soll, wenn diediv
betreffende Antwort mit JavaScript ausgefüllt wird. Angenommen, Siediv
füllen ein.load()
Ereignis mit jQuery wie folgt aus:Der obige Code für
.on()
würde nicht stehen. Stattdessen sollten Sie Ihren Code wie folgt leicht ändern:Dieser Code funktioniert für ein Element, das nach einem
.load()
Ereignis mit JavaScript gefüllt ist. Ändern Sie einfach Ihr Argument in den entsprechenden Selektor.quelle
.on()
Lösung funktioniert entweder mit dem Entfernen des Pseudo-Hover-Ereignisses oder mit den realen. Ich mag die erste, die Sie mit mouseenter / mouseleave +1 dafür illustriert habenKeine dieser Lösungen hat bei mir funktioniert, wenn Sie mit der Maus über Objekte gefahren sind, die erstellt wurden, nachdem das Dokument geladen wurde, wie es die Frage erfordert. Ich weiß, dass diese Frage alt ist, aber ich habe eine Lösung für diejenigen, die noch suchen:
Dadurch werden die Funktionen an den Selektor gebunden, sodass Objekte, die mit diesem Selektor erstellt wurden, nachdem das Dokument fertig ist, es weiterhin aufrufen können.
quelle
mouseover
undmouseout
Ereignisse hier verwenden, wird der Code kontinuierlich ausgelöst, wenn der Benutzer die Maus innerhalb des Elements bewegt. Ich denkemouseenter
und binmouseleave
angemessener, da es nur einmal beim Eintritt feuert.Ich bin mir nicht sicher, wie der Rest Ihres Javascript aussieht, daher kann ich nicht feststellen, ob es Störungen gibt. Funktioniert aber
.hover()
gut als Event mit.on()
.Wenn Sie seine Ereignisse nutzen möchten, verwenden Sie das vom Ereignis zurückgegebene Objekt:
http://jsfiddle.net/hmUPP/2/
quelle
$('#id').hover(function(){ //on }, function(){ //off});
.on()
mit ,hover
wenn Sie können genauso einfach loswerden.on()
und ersetzen Sie es mit der.hover()
Funktion und erhalten die gleichen Ergebnisse. Geht es bei jQuery nicht darum, weniger Code zu schreiben?mouseenter
mouseleave
.on()
hover
Die Ereignisunterstützung inOn()
wurde in jQuery 1.8 nicht mehr unterstützt und in jQuery 1.9 entfernt.Die jQuery-Hover-Funktion bietet Mouseover- und Mouseout-Funktionen.
$ (Selektor) .hover (inFunction, outFunction);
Quelle: http://www.w3schools.com/jquery/event_hover.asp
quelle
Ich bin gerade aus dem Internet gesurft und hatte das Gefühl, ich könnte dazu beitragen. Ich habe festgestellt, dass der von @calethebrewer gepostete Code zu mehreren Aufrufen über den Selektor und unerwartetem Verhalten führen kann, zum Beispiel:
Diese Geige http://jsfiddle.net/TWskH/12/ illustriert meinen Standpunkt. Beim Animieren von Elementen wie in Plugins habe ich festgestellt, dass diese mehrfachen Trigger zu unbeabsichtigtem Verhalten führen, was dazu führen kann, dass die Animation oder der Code mehr als erforderlich aufgerufen wird.
Mein Vorschlag ist, einfach durch mouseenter / mouseleave zu ersetzen: -
Obwohl dies verhinderte, dass mehrere Instanzen meiner Animation aufgerufen wurden, entschied ich mich schließlich für Mouseover / Mouseleave, um festzustellen, wann Kinder des Elternteils über den Mauszeiger schwebten.
quelle
Sie können
.on()
mit verwenden,hover
indem Sie die folgenden Schritte ausführen:Das wäre folgendes zu tun:
BEARBEITEN (Hinweis für Benutzer von jQuery 1.8+):
quelle
mouseenter
und erledigt werden kann.mouseleave
Ich weiß, dies beantwortet nicht die ursprüngliche Frage von OP, aberhover
auf diese Weise zu verwenden, ist dennoch nicht klug..hover()
.mouseenter
undmouseleave
nicht nur dafür, dass es funktionierthover
. Wenn eshover
aus Leistungsgründen keinen wirklichen Grund für die Verwendung gibt , warum sollten Sie es verwenden, wenn von neuem Code dringend abgeraten wird?hover
Die Ereignisunterstützung inOn()
wurde in jQuery 1.8 nicht mehr unterstützt und in jQuery 1.9 entfernt.quelle
Sie können einen oder mehrere Ereignistypen angeben, die durch ein Leerzeichen getrennt sind.
Also
hover
gleichmouseenter mouseleave
.Das ist mein Vorschlag:
quelle
Wenn Sie es als Bedingung für ein anderes Ereignis benötigen, habe ich es folgendermaßen gelöst:
In einem anderen Fall können Sie es dann einfach verwenden:
(Ich sehe einige
is(':hover')
, die dies lösen, aber dies ist (noch) kein gültiger jQuery-Selektor und funktioniert nicht in allen kompatiblen Browsern.)quelle
Das jQuery-Plugin hoverIntent http://cherne.net/brian/resources/jquery.hoverIntent.html geht viel weiter als die hier aufgeführten naiven Ansätze. Während sie sicherlich funktionieren, verhalten sie sich möglicherweise nicht unbedingt so, wie Benutzer es erwarten.
Der stärkste Grund für die Verwendung von hoverIntent ist die Timeout- Funktion. Sie können beispielsweise verhindern, dass ein Menü geschlossen wird, weil ein Benutzer seine Maus etwas zu weit nach rechts oder links zieht, bevor er auf das gewünschte Element klickt. Es bietet auch Funktionen, um Schwebeereignisse in einem Staudamm nicht zu aktivieren, und wartet auf fokussiertes Schweben.
Anwendungsbeispiel:
Weitere Erläuterungen hierzu finden Sie unter https://stackoverflow.com/a/1089381/37055
quelle