Mam input type="image"
. To działa jak notatki komórkowe w Microsoft Excel. Jeśli ktoś wpisze liczbę w pole tekstowe, z którym input-image
jest ona sparowana, skonfiguruję moduł obsługi zdarzeń dla input-image
. Następnie, gdy użytkownik kliknie przycisk image
, pojawi się małe okno podręczne, aby dodać notatki do danych.
Mój problem polega na tym, że gdy użytkownik wpisuje zero w polu tekstowym, muszę wyłączyć moduł input-image
obsługi zdarzeń. Próbowałem następujących, ale bezskutecznie.
$('#myimage').click(function { return false; });
źródło
unbind()
działa? Dodałem go i oba wydarzenia są nadal uruchamiane.$('#myimage').off('click').on('click',function(){...})
.unbind()
pomogło mi w sytuacji, w której przełączałem kilka pól wyboru, ale po ponownym uruchomieniu.click()
wielokrotnie dodawałem program obsługi, powodując zawieszenie się aplikacji.Nie było to dostępne, gdy udzielono odpowiedzi na to pytanie, ale można również użyć metody live () , aby włączyć / wyłączyć zdarzenia.
Z tym kodem stanie się to, że kliknięcie przycisku #mydisable spowoduje dodanie klasy wyłączonej do elementu #myimage. Sprawi to, że selektor nie będzie już pasował do elementu, a zdarzenie nie zostanie uruchomione, dopóki klasa „disabled” nie zostanie usunięta, dzięki czemu selektor .live () znów będzie ważny.
Ma to inne zalety, dodając również stylizację opartą na tej klasie.
źródło
live()
, nigdy wcześniej nie myślałem o używaniu go w ten sposób ... Czy oprócz wygody kodowania jest on szybszy, czy oferuje jakieś inne zalety korzystania z opcji bind / unbind?Jeśli chcesz odpowiedzieć na zdarzenie tylko raz , poniższa składnia powinna być naprawdę pomocna:
Za pomocą arguments.callee możemy zagwarantować, że jeden konkretny moduł obsługi funkcji anonimowych zostanie usunięty, a tym samym mieć pojedynczy moduł obsługi czasu dla danego zdarzenia. Mam nadzieję, że to pomaga innym.
źródło
Można to zrobić za pomocą funkcji unbind.
Możesz dodać wiele procedur obsługi zdarzeń do tego samego obiektu i zdarzenia w jquery. Oznacza to, że dodanie nowego nie zastępuje starych.
Istnieje kilka strategii zmiany procedur obsługi zdarzeń, takich jak przestrzenie nazw zdarzeń. Dokumenty online zawierają kilka stron na ten temat.
Spójrz na to pytanie (tak nauczyłem się unbind). W odpowiedziach znajduje się użyteczny opis tych strategii.
Jak czytać funkcje wywołania zwrotnego związanego z dymem w jquery
źródło
może metoda unbind zadziała dla ciebie
źródło
Musiałem ustawić to zdarzenie na zero, używając rekwizytów i attr. Nie mogłem tego zrobić z jednym lub drugim. Nie mogłem też zmusić .unbind do pracy. Pracuję nad elementem TD.
źródło
$("#elementId").click(function(){//Event execution code goes here});
, aby w ogóle nie było go na stronie HTML. Aby wyjaśnić, że faktycznie musimy użyć.unbind()
lub preferowanego.off()
unbind
ioff
nie rozwiązało problemu. Dziękuję Ci bardzo!Jeśli zdarzenie jest dołączone w ten sposób , a cel ma zostać odłączony:
źródło
Być może dodajesz
onclick
moduł obsługi jako znacznik wbudowany:Jeśli tak, jquery
.off()
lub.unbind()
nie będzie działać. Musisz również dodać oryginalny moduł obsługi zdarzeń w jquery:Następnie jquery ma odwołanie do procedury obsługi zdarzeń i może ją usunąć:
VoidKing wspomina o tym nieco bardziej skośnie w komentarzu powyżej.
źródło
Zaktualizowano w 2014 r
Korzystając z najnowszej wersji jQuery, możesz teraz odłączyć wszystkie zdarzenia w przestrzeni nazw, po prostu wykonując te czynności
$( "#foo" ).off( ".myNamespace" );
źródło
Najlepszym sposobem na usunięcie wbudowanego zdarzenia onclick jest
$(element).prop('onclick', null);
źródło
Dla
remove
WSZYSTKICHevent-handlers
to właśnie działało dla mnie:Usunięcie wszystkich programów obsługi zdarzeń oznacza posiadanie zwykłego interfejsu
HTML structure
bez wszystkichevent handlers
dołączonych do niegoelement
i jegochild nodes
. Aby to zrobić,jQuery's clone()
pomógł.Dzięki temu będziemy mieć
clone
miejsce na „original
bez”event-handlers
.Powodzenia...
źródło
Dzięki za informację. bardzo pomocne Użyłem go do blokowania interakcji strony w trybie edycji przez innego użytkownika. Użyłem go w połączeniu z ajaxComplete. Niekoniecznie to samo zachowanie, ale nieco podobne.
źródło
W przypadku, gdy
.on()
wcześniej użyto metody z określonym selektorem, jak w poniższym przykładzie:Zarówno
unbind()
i.off()
metody nie zadziała.Jednakże .undelegate () Sposób może być wykorzystywany, aby całkowicie usunąć z obsługi zdarzenia dla wszystkich elementów, które pasują do wybranego przełącznika:
źródło
Jeśli używasz,
$(document).on()
aby dodać detektor do dynamicznie tworzonego elementu, być może będziesz musiał użyć następujących elementów, aby go usunąć:źródło
Działa to również dobrze. Proste i łatwe. Patrz http://jsfiddle.net/uZc8w/570/
źródło
jeśli ustawisz
onclick
viahtml
, musiszremoveAttr ($(this).removeAttr('onclick'))
jeśli ustawisz to za pomocą jquery (jak po pierwszym kliknięciu w moich przykładach powyżej), musisz to zrobić
unbind($(this).unbind('click'))
źródło
Wiem, że to się spóźnia, ale dlaczego nie użyć zwykłego JS do usunięcia zdarzenia?
lub, jeśli używasz nazwanej funkcji jako procedury obsługi zdarzeń:
źródło
Wszystkie opisane podejścia nie działały dla mnie, ponieważ dodawałem zdarzenie click
on()
do do dokumentu, w którym element został utworzony w czasie wykonywania:Moje obejście:
Ponieważ nie mogłem odłączyć klasy „.button”, właśnie przypisałem inną klasę do przycisku, który miał te same style CSS. W ten sposób moduł obsługi zdarzeń na żywo / zdarzenia zignorował wreszcie kliknięcie:
Mam nadzieję, że to pomaga.
źródło
Mam nadzieję, że mój poniższy kod wyjaśnia wszystko. HTML:
źródło
})(jQuery);
przenosicie się do IIFE, skoro jest już dostępny na całym świecie?Po prostu usuń to z przycisku:
źródło