Da ich keinen Kommentar abgeben kann, werde ich dies als Antwort schreiben!
Bitte haben Sie Verständnis für den Unterschied zwischen dem CSS-Selektor ": hover" und dem Hover-Ereignis!
": hover" ist ein CSS-Selektor und wurde bei dieser Verwendung tatsächlich mit dem Ereignis entfernt $("#elementId").is(":hover")
, aber in seiner Bedeutung hat es wirklich nichts mit dem jQuery-Ereignis-Hover zu tun.
wenn Sie codieren $("#elementId:hover")
, wird das Element nur ausgewählt, wenn Sie mit der Maus darüber fahren. Die obige Anweisung funktioniert mit allen jQuery-Versionen, wenn Sie dieses Element mit reiner und legitimer CSS-Auswahl auswählen.
Auf der anderen Seite schwebt das Ereignis, das ist
$("#elementId").hover(
function() {
doSomething();
}
);
wird in der Tat als jQuery 1.8 hier der Status von der jQuery-Website verworfen:
Wenn der Ereignisname "hover" verwendet wird, konvertiert das Ereignissubsystem ihn in der Ereigniszeichenfolge in "mouseenter mouseleave". Dies ist aus mehreren Gründen ärgerlich:
Semantik: Das Schweben ist nicht dasselbe wie das Betreten und Verlassen eines Elements durch die Maus. Es impliziert eine gewisse Verzögerung oder Verzögerung vor dem Abfeuern. Ereignisname: Der vom angehängten Handler zurückgegebene event.type ist kein Hover, sondern entweder mouseenter oder mouseleave. Kein anderes Ereignis tut dies. Kooptieren des Namens "Hover": Es ist nicht möglich, ein Ereignis mit dem Namen "Hover" anzuhängen und mit .trigger ("Hover") auszulösen. Die Dokumente nennen diesen Namen bereits "stark von neuem Code abgeraten". Ich möchte ihn offiziell für 1.8 ablehnen und ihn schließlich entfernen.
Warum sie die Verwendung entfernt haben, ist (": hover") unklar, aber na ja, Sie können es immer noch wie oben verwenden und hier ist ein kleiner Hack, um es weiterhin zu verwenden.
(function ($) {
/**
* :hover selector was removed from jQuery 1.8+ and cannot be used with .is(":hover")
* but using it in this way it works as :hover is css selector!
*
**/
$.fn.isMouseOver = function() {
return $(this).parent().find($(this).selector + ":hover").length > 0;
};
})(jQuery);
Oh, und ich würde die Timeout-Version nicht empfehlen, da dies viel Komplexität mit sich bringt. Verwenden Sie Timeout-Funktionen für diese Art von Dingen, wenn es keinen anderen Weg gibt, und glauben Sie mir, in 95% aller Fälle gibt es einen anderen Weg !
Ich hoffe, ich konnte ein paar Leuten da draußen helfen.
Greetz Andy