Jak uzyskać listę zdarzeń, w postaci tam funkcji, węzła w JS.
Zdarzenia wstawiamy za pomocą, np.: $(elem).on(zdarzenie_1,funkcja_1)
, $(elem).on(zdarzenie_2,funkcja_2)
,..., to jak uzyskać te funkcje, tzn. funkcja_1
, funkcja_2
,...., tzn.: tabelę tych funkcji, wraz z nazwami zdarzeń zdarzenie_1
, zdarzenie_2
,.....
Czyli co dokładnie chcesz zrobić? Tytuł dosyć enigmatyczny.
Riddle napisał(a):
Czyli co dokładnie chcesz zrobić? Tytuł dosyć enigmatyczny.
Już opisałem powyżej, w postaci poprawek postu, którego nie zauważyłeś, tzn.:
Zdarzenia wstawiamy za pomocą, np.: $(elem).on(zdarzenie_1,funkcja_1)
, $(elem).on(zdarzenie_2,funkcja_2),
..., to jak uzyskać te funkcje, tzn. funkcja_1
, funkcja_2
,...., tzn.: tabelę tych funkcji, wraz z nazwami zdarzeń zdarzenie_1
, zdarzenie_2
,....., czyli jak uzyskać listę zdarzeń, w postaci tam funkcji, węzła w JS.
TomRZ napisał(a):
Tutaj masz odpowiedź:
https://stackoverflow.com/questions/2518421/jquery-find-events-handlers-registered-with-an-object
Kod: console.log(jQuery._data( jQuery("body")[0],"events"))
zwraca undefined, a kod: console.log(jQuery._data( jQuery("body")[0]))
, zwraca obiekt Object
, tam widzę element events
, jak się do niego odwołać, bo kod:
console.log(jQuery._data( jQuery("body")[0]).events)
też zwraca undefined
.
Myślę, że jest to problem XY https://xyproblem.info/
i że coś robisz, ale nie wiadomo, po co ci potrzebne. Można tylko zgadywać:
- czy chcesz również wywoływać ręcznie zdarzenia? Wtedy w jQuery masz funkcję
trigger
. https://api.jquery.com/trigger/ - tym niemniej drążąc dalej, to może w ogóle nie potrzebujesz wywoływać ręcznie zdarzeń, tylko chcesz po prostu móc odpalać kawałki kodu po kilka razy. Wtedy przecież możesz zrobić wydzielić to do jakichś funkcji:
function loadData() { //.... } $(elem).on('click', loadData); ale i wtedy możesz bezpośrednio to uruchomić: loadData();
- a może faktycznie chcesz uzyskać listę zdarzeń. Pytanie: po co? Rozsądny use case byłby do debugowania, a @TomRZ napisał już rozwiązanie wyżej. Chociaż jak rozumiem ten wątek zakłada użycie jQuery, zastanawiam się, czy bez jQuery dałoby się to uzyskać. Krótkie googlanie pokazuje, że jest coś takiego jak funkcja
getEventListeners
. która działa jednak tylko w konsoli przeglądarki (sprawdzałem na Chrome): https://developer.chrome.com/blog/get-and-debug-event-listeners/
No ale w dalszym ciągu - ten wątek tak mętnie opisuje rzeczywisty cel, że mogę tylko zgadywać.
LukeJL napisał(a):
Myślę, że jest to problem XY https://xyproblem.info/
i że coś robisz, ale nie wiadomo, po co ci potrzebne. Można tylko zgadywać:
- czy chcesz również wywoływać ręcznie zdarzenia? Wtedy w jQuery masz funkcję
trigger
. https://api.jquery.com/trigger/- tym niemniej drążąc dalej, to może w ogóle nie potrzebujesz wywoływać ręcznie zdarzeń, tylko chcesz po prostu móc odpalać kawałki kodu po kilka razy. Wtedy przecież możesz zrobić wydzielić to do jakichś funkcji:
function loadData() { //.... } $(elem).on('click', loadData); ale i wtedy możesz bezpośrednio to uruchomić: loadData();
- a może faktycznie chcesz uzyskać listę zdarzeń. Pytanie: po co? Rozsądny use case byłby do debugowania, a @TomRZ napisał już rozwiązanie wyżej. Chociaż jak rozumiem ten wątek zakłada użycie jQuery, zastanawiam się, czy bez jQuery dałoby się to uzyskać. Krótkie googlanie pokazuje, że jest coś takiego jak funkcja
getEventListeners
. która działa jednak tylko w konsoli przeglądarki (sprawdzałem na Chrome): https://developer.chrome.com/blog/get-and-debug-event-listeners/No ale w dalszym ciągu - ten wątek tak mętnie opisuje rzeczywisty cel, że mogę tylko zgadywać.
Kod:
js var c=jQuery._data( jQuery("body")[0]).events.scroll;
wywołuje , że events
nie jest zdefiniowany, a:
js var c=jQuery._data( jQuery("body")[0]);
zwraca zmienną typu Objekt
, w której na konsoli widzę events
jako jeden z elementów. Co nie tak robię.