Jak usunąć „hover” w jQuery?
To nie działa:
$(this).unbind('hover');
javascript
jquery
zsharp
źródło
źródło
Odpowiedzi:
$(this).unbind('mouseenter').unbind('mouseleave')
lub bardziej zwięźle (dzięki @Chad Grant ):
$(this).unbind('mouseenter mouseleave')
źródło
W rzeczywistości dokumentacja jQuery ma prostsze podejście niż połączone przykłady pokazane powyżej (chociaż będą działać dobrze):
Począwszy od jQuery 1.7, możesz również używać
$.on()
i$.off()
do wiązania zdarzeń, więc aby rozwiązać zdarzenie najechania, możesz użyć prostszego i bardziej przejrzystego:Nazwa pseudo-zdarzenia „hover” jest używana jako skrót od „mouseenter mouseleave”, ale była obsługiwana inaczej we wcześniejszych wersjach jQuery; wymagające wyraźnego usunięcia każdej z literalnych nazw zdarzeń. Użycie
$.off()
teraz umożliwia porzucenie obu zdarzeń myszy przy użyciu tego samego skrótu.Edycja 2016:
Wciąż popularne pytanie, więc warto zwrócić uwagę na uwagę @ Dennis98 w komentarzach poniżej, że w jQuery 1.9+ zdarzenie „hover” zostało wycofane na rzecz standardowych wywołań „mouseenter mouseleave”. Twoja wiążąca deklaracja wydarzenia powinna teraz wyglądać następująco:
$('#myElement').off('mouseenter mouseleave');
źródło
$.off("hover")
nie działa. Jednak użycie obu zdarzeń działa świetnie.$.off()
nadal tam jest, jest to obecnie zalecana metoda rozpinania wydarzeń. Więc na razie musisz pisać$(element).off("mouseenter mouseleave");
.Usuń powiązania zdarzeń
mouseenter
imouseleave
indywidualnie lub odłącz wszystkie zdarzenia na elemencie (elementach).lub
źródło
unbind () nie działa z zakodowanymi na stałe zdarzeniami wbudowanymi.
Na przykład, jeśli chcesz odłączyć zdarzenie mouseover od
<div id="some_div" onmouseover="do_something();">
, stwierdziłem, że$('#some_div').attr('onmouseover','')
jest to szybki i brudny sposób na osiągnięcie tego.źródło
Innym rozwiązaniem jest .die () dla zdarzeń, które zostały dołączone za pomocą .live () .
Dawny.:
Dobre odniesienie można znaleźć tutaj: Exploring jQuery .live () i .die ()
(Przepraszam za mój angielski: ">)
źródło
Wszystko, co robi najechanie za kulisami, wiąże się z właściwościami mouseover i mouseout. Chciałbym wiązać i usuwać twoje funkcje z tych zdarzeń indywidualnie.
Na przykład załóżmy, że masz następujący html:
wtedy twój jQuery wyglądałby tak:
źródło
Możesz usunąć określoną procedurę obsługi zdarzeń, która została dołączona przy
on
użyciuoff
Używając tego, usuniesz tylko handlerFunction
Inną dobrą praktyką jest ustawienie nameSpace dla wielu dołączonych zdarzeń
źródło
Zauważyłem, że to działa jako drugi argument (funkcja) do .hover ()
Pierwsza funkcja (argument funkcji .hover ()) to mouseover i wykona Twój kod. Drugim argumentem jest mouseout, która spowoduje odłączenie zdarzenia hover od #yourId. Twój kod zostanie wykonany tylko raz.
źródło
$.unbind()
samo w sobie nie spowoduje usunięcia wszystkich zdarzeń z tego obiektu? W takim przypadku takie rzeczy jak twoje$.click()
wydarzenia teraz zawiodłyby, prawda?