Używam Chrome i własnej strony internetowej.
Co wiem od środka:
1 ) Mam formularz, w którym ludzie rejestrują się, klikając ten pomarańczowy przycisk obrazu:
2 ) Sprawdzam to i to wszystko:
<img class="formSend" src="images/botoninscribirse2.png">
3 ) Na górze kodu źródłowego znajduje się mnóstwo źródeł skryptów. Wiem, który przycisk wywołuje, ponieważ go zakodowałem:<script src="js/jquery2.js" type="text/javascript"></script>
4 ) W tym pliku możesz znaleźć: $(".formSend").click(function() { ... });
co jest uruchamiane przez przycisk (aby wykonać dość złożoną weryfikację formularza i przesłać) i co chcę, aby móc to znaleźć za pomocą narzędzi chrome dev na dowolnej stronie internetowej.
Jak mogę dowiedzieć się, gdzie wywołuje element?
Karta Słuchacze nie działała dla mnie. Próbowałem więc poszukać detektorów zdarzeń kliknięcia, co wydawało mi się bezpiecznym założeniem, ale ... tam nie jquery2.js
ma (i tak naprawdę nie wiedziałbym, który plik to kod, więc marnowałem czas na sprawdzanie wszystkich tych ... .):
Mojej $(".formSend").click(function() { ... });
funkcji w jquery2.js
pliku nie ma.
Jesse wyjaśnia, dlaczego :
„Wreszcie przyczyną, dla której twoja funkcja nie jest bezpośrednio związana z obsługą zdarzeń kliknięcia, jest to, że jQuery zwraca funkcję, która zostaje powiązana. Z kolei funkcja jQuery przechodzi przez pewne warstwy abstrakcji i sprawdza, a gdzieś tam wykonuje swoją funkcję . ”
Jak sugeruje niektórzy z was, zebrałem metody, które zadziałały w jednej odpowiedzi poniżej .
źródło
Visual Event
bookmarkletu. Wykrywa zdarzenia kliknięcia powiązane popularnymi bibliotekami i tworzy nakładkę witryny pokazującą, gdzie zdarzenia są powiązane, i podaje próbki kodu oraz lokalizacje źródłowe dla każdego zdarzenia.Odpowiedzi:
Odpowiedź Aleksandra Pawłowa zbliża się do tego, czego chcesz.
Ze względu na rozległość abstrakcji i funkcjonalności jQuery wiele skoków wymaga przeskoczenia, aby dotrzeć do sedna wydarzenia. Skonfigurowałem ten jsFiddle, aby zademonstrować pracę.
1. Konfigurowanie punktu przerwania detektora zdarzeń
Byłeś blisko tego.
2. Kliknij przycisk!
Chrome Dev Tools wstrzyma wykonywanie skryptu i przedstawi ten piękny splątanie zminimalizowanego kodu:
(kliknij, aby powiększyć)
3. Znajdź wspaniały kod!
Teraz sztuczka polega na tym, aby nie dać się ponieść naciskaniu klawisza i nie spuszczać oka z ekranu.
4. Objaśnienie
Nie mam dokładnej odpowiedzi ani wyjaśnienia, dlaczego jQuery przechodzi przez wiele warstw abstrakcji, którą robi - wszystko, co mogę zasugerować, to fakt, że jest to zadanie polegające na oderwaniu jego użycia od przeglądarki wykonującej kod .
Oto jsFiddle z debugowaną wersją jQuery (tzn. Nie zminimalizowana). Gdy spojrzysz na kod pierwszego (nie zminimalizowanego) punktu przerwania, zobaczysz, że kod obsługuje wiele rzeczy:
Powodem, dla którego myślę, że przegapiłeś to podczas próby „ wykonania pauzy i przeskakuję linia po linii ”, jest to, że mogłeś użyć funkcji „Step Over” zamiast Step In. Oto odpowiedź StackOverflow wyjaśniająca różnice.
Wreszcie przyczyną, dla której twoja funkcja nie jest bezpośrednio związana z obsługą zdarzeń kliknięcia, jest to, że jQuery zwraca funkcję, która zostaje powiązana. Z kolei funkcja jQuery przechodzi przez niektóre warstwy abstrakcji i sprawdza, a gdzieś tam wykonuje twoją funkcję.
źródło
F11
kluczowe trafienia! Teraz ma to sens, ale jest to po prostu niepraktyczne. Poprawię jednak moje pytanie.Rozwiązanie 1: Framework blackboxing
Działa świetnie, minimalna konfiguracja i brak stron trzecich.
Zgodnie z dokumentacją Chrome :
Oto zaktualizowany przepływ pracy:jquery\..*\.js
(glob wzorzec / ludzki tłumaczenie:jquery.*.js
)|
, na przykład tak:jquery\..*\.js|include\.postload\.js
(który działa tak jak „lub ten wzór”, że tak powiem. Lub kontynuuj dodawanie ich za pomocą przycisku „Dodaj”.Z menu kontekstowego można także korzystać podczas pracy w panelu Źródła. Podczas przeglądania pliku możesz kliknąć edytor prawym przyciskiem myszy i wybrać Skrypt Blackbox. Spowoduje to dodanie pliku do listy w panelu Ustawienia:
Rozwiązanie 2: Zdarzenie wizualne
To doskonałe narzędzie do :
Rozwiązanie 3: Debugowanie
Możesz wstrzymać kod, gdy klikniesz gdzieś na stronie lub gdy DOM zostanie zmodyfikowany ... i inne rodzaje punktów przerwania JS , które warto znać. Powinieneś zastosować tutaj blackboxing , aby uniknąć koszmaru.
W tym przypadku chcę wiedzieć, co dokładnie dzieje się po kliknięciu przycisku.
Otwórz Narzędzia deweloperskie -> zakładka Źródła, a po prawej znajdź
Event Listener Breakpoints
:Rozwiń
Mouse
i wybierzclick
Rozwiązanie 4: Słowa kluczowe dotyczące połowów
Po aktywacji Dev Tools możesz przeszukiwać całą bazę kodu (cały kod we wszystkich plikach) za pomocą ⌘+ ⌥+ Flub:
i wyszukiwanie,
#envio
czy jakikolwiek inny tag / klasa / id, który Twoim zdaniem rozpoczyna imprezę i możesz dostać się gdzieś szybciej niż oczekiwano.Pamiętaj, że czasami jest nie tylko
img
wiele elementów, ale możesz nie wiedzieć, który wyzwala kod.Jeśli jest to trochę poza Twoją wiedzą, zapoznaj się z samouczkiem Chrome na temat debugowania .
źródło
Wygląda na to, że część „... i przeskakuję linia po linii ...” jest nieprawidłowa. Czy używasz StepOver lub StepIn i jesteś pewien, że przypadkowo nie przegapisz odpowiedniego połączenia?
To powiedziawszy, frameworki do debugowania mogą być nużące właśnie z tego powodu. Aby rozwiązać ten problem, możesz włączyć eksperyment „Włącz obsługę debugowania frameworków” . Miłego debugowania! :)
źródło
Możesz użyć findHandlersJS
Możesz znaleźć przewodnik, wykonując w konsoli chrome:
findEventHandlers("click", "img.envio")
Otrzymasz następujące informacje wydrukowane w konsoli Chrome:
Rzeczywisty element, w którym zarejestrowano moduł obsługi zdarzeń
Tablica z informacjami o modułach obsługi zdarzeń jquery dla interesującego nas typu zdarzenia (np. kliknięcie, zmiana itp.)
Rzeczywista metoda obsługi zdarzeń, którą można zobaczyć, klikając ją prawym przyciskiem myszy i wybierając opcję Pokaż definicję funkcji
Selektor przewidziany dla zdarzeń delegowanych. Będzie pusty dla bezpośrednich wydarzeń.
Wymień elementy zawierające elementy, na które cel ten obsługuje. Na przykład dla procedury obsługi zdarzeń delegowanych, która jest zarejestrowana w obiekcie dokumentu i jest kierowana do wszystkich przycisków na stronie, ta właściwość wyświetli wszystkie przyciski na stronie. Możesz je najechać myszką i zobaczyć je podświetlone w chromie.
Więcej informacji tutaj, a możesz spróbować w tej przykładowej witrynie tutaj .
źródło
To rozwiązanie wymaga metody danych jQuery .
$._data($(".example").get(0), "events")
$._data()
właśnie uzyskuje dostęp do metody danych jQuery. Bardziej czytelną alternatywą może byćjQuery._data()
.Interesujący punkt tej odpowiedzi SO :
Wersja agnostyczna jQuery byłaby:
(jQuery._data || jQuery.data)(elem, 'events');
źródło