Próbuję usunąć detektor zdarzeń wewnątrz definicji detektora:
canvas.addEventListener('click', function(event) {
click++;
if(click == 50) {
// remove this event listener here!
}
// More code here ...
Jak mogłem to zrobić? this = event ... Dziękuję.
javascript
events
event-handling
listener
Tomasz
źródło
źródło
if(click == 50) {
powinny byćif( click === 50 )
lubif( click >= 50 )
- nie zmienią wyniku, ale ze względów rozsądku te sprawdzenia mają więcej sensu.Odpowiedzi:
Musisz użyć nazwanych funkcji.
Ponadto
click
zmienna musi znajdować się na zewnątrz procedury obsługi, aby można ją było zwiększać.EDYCJA: Możesz zamknąć
click_counter
zmienną w ten sposób:W ten sposób możesz zwiększyć licznik na kilka elementów.
Jeśli tego nie chcesz i chcesz, aby każdy z nich miał swój własny licznik, zrób to:
EDYCJA: zapomniałem nazwać handlera zwracanego w ostatnich dwóch wersjach. Naprawiony.
źródło
myClick = function(event){...}
również uważana za nazwaną funkcję?Powinienem to zrobić.
źródło
arguments.callee
dla zainteresowanych stron: developer.mozilla.org/en/JavaScript/Reference/ ...arguments.callee()
w trybie ścisłym. Unikaj używaniaarguments.callee()
poprzez nadawanie wyrażeniom funkcji nazwy lub użycie deklaracji funkcji gdzie funkcja musi wywołać samą siebie. " (chociaż używacallee()
zamiastcallee
, jest nadal usuwany, boo!)Możesz użyć nazwanego wyrażenia funkcyjnego (w tym przypadku funkcja jest nazwana
abc
), na przykład:Szybki i brudny przykład pracy: http://jsfiddle.net/8qvdmLz5/2/ .
Więcej informacji o nazwanych wyrażeniach funkcyjnych: http://kangax.github.io/nfe/ .
źródło
źródło
Jeśli rozwiązanie @ Cybernate nie działa, spróbuj przełamać wyzwalacz do jego własnej funkcji, aby móc się do niej odwołać.
źródło
Jeśli ktoś używa jquery, może to zrobić w ten sposób:
Mam nadzieję, że może to komuś pomóc. Zauważ, że odpowiedź udzielona przez @ user113716 działa ładnie :)
źródło
Myślę, że możesz potrzebować zdefiniować funkcję handlera z wyprzedzeniem, na przykład:
Umożliwi to usunięcie modułu obsługi według nazwy z samego siebie.
źródło
Spróbuj tego, to zadziałało dla mnie.
źródło