Saya menggunakan Chrome dan situs web saya sendiri.
Apa yang saya tahu dari dalam:
1 ) Saya memiliki formulir tempat orang mendaftar dengan mengklik tombol gambar oranye ini:
2 ) Saya memeriksanya, dan ini adalah semuanya:
<img class="formSend" src="images/botoninscribirse2.png">
3 ) Di bagian atas kode sumber, ada banyak sumber skrip. Saya tahu tombol mana yang memanggil karena saya memberi kode:<script src="js/jquery2.js" type="text/javascript"></script>
4 ) Di dalam file itu, Anda dapat menemukan: $(".formSend").click(function() { ... });
apa yang dipicu oleh tombol (untuk melakukan validasi dan pengiriman formulir yang cukup kompleks) dan yang saya inginkan adalah dapat menemukannya dengan menggunakan alat dev chrome di situs web mana pun.
Bagaimana saya bisa mengetahui di mana elemen itu memanggil?
Tab pendengar tidak berfungsi untuk saya. Jadi saya mencoba mencari pendengar acara klik, yang sepertinya taruhan yang aman bagi saya tapi ... tidak ada jquery2.js
di sana (dan saya tidak akan benar-benar tahu file mana kode tersebut sehingga saya akan membuang waktu memeriksa semua ini .. .):
$(".formSend").click(function() { ... });
Fungsi saya di dalam jquery2.js
file tidak ada.
Jesse menjelaskan alasannya :
"Akhirnya, alasan mengapa fungsi Anda tidak terikat langsung ke event handler klik adalah karena jQuery mengembalikan fungsi yang terikat. Fungsi jQuery, pada gilirannya, melewati beberapa lapisan abstraksi dan memeriksa, dan di suatu tempat di sana, ia mengeksekusi fungsi Anda . "
Seperti yang disarankan oleh beberapa dari Anda, saya telah mengumpulkan metode yang bekerja dalam satu jawaban di bawah .
sumber
Visual Event
bookmarklet. Ini mendeteksi peristiwa klik terikat oleh perpustakaan populer dan membuat overlay situs yang menunjukkan di mana peristiwa terikat dan memberikan sampel kode dan lokasi sumber untuk setiap peristiwa.Jawaban:
Jawaban Alexander Pavlov paling dekat dengan apa yang Anda inginkan.
Karena kepanjangan dari abstraksi dan fungsionalitas jQuery, banyak rintangan harus dilompati untuk mendapatkan daging dari acara tersebut. Saya telah mengatur jsFiddle ini untuk menunjukkan pekerjaan.
1. Menyiapkan Breakpoint Pendengar Acara
Anda sudah dekat dengan yang satu ini.
2. Klik tombolnya!
Alat Chrome Dev akan menghentikan sementara eksekusi skrip, dan memberi Anda keterikatan kode minified yang indah ini:
(klik untuk memperbesar)
3. Temukan kode yang mulia!
Sekarang, trik di sini adalah untuk tidak terbawa dengan menekan tombol, dan mengawasi layar.
4. Penjelasan
Saya tidak memiliki jawaban yang tepat, atau penjelasan mengapa jQuery melewati banyak lapisan abstraksi yang dilakukannya - yang bisa saya sarankan adalah karena pekerjaan yang dilakukannya untuk menghilangkan penggunaannya dari browser yang mengeksekusi kode .
Berikut adalah jsFiddle dengan versi debug dari jQuery (yaitu, tidak diperkecil). Ketika Anda melihat kode pada breakpoint pertama (non-minified), Anda dapat melihat bahwa kode tersebut menangani banyak hal:
Alasan saya pikir Anda melewatkannya pada upaya Anda ketika " eksekusi berhenti dan saya melompat baris demi baris ", adalah karena Anda mungkin telah menggunakan fungsi "Step Over", bukannya Step In. Berikut adalah jawaban StackOverflow yang menjelaskan perbedaannya.
Akhirnya, alasan mengapa fungsi Anda tidak terikat langsung ke event handler klik adalah karena jQuery mengembalikan fungsi yang terikat. Fungsi jQuery pada gilirannya melewati beberapa lapisan abstraksi dan memeriksa, dan di suatu tempat di sana, ia menjalankan fungsi Anda.
sumber
F11
hit kunci! Sekarang masuk akal, tetapi itu tidak praktis. Saya akan memperbaiki pertanyaan saya.Solusi 1: Kerangka blackboxing
Bekerja dengan baik, pengaturan minimal dan tidak ada pihak ketiga.
Menurut dokumentasi Chrome :
Inilah alur kerja yang diperbarui:jquery\..*\.js
(pola glob / terjemahan manusia :jquery.*.js
)|
, seperti:jquery\..*\.js|include\.postload\.js
(yang bertindak seperti "atau pola ini", misalnya. Atau terus menambahkannya dengan tombol "Tambah".Anda juga dapat menggunakan menu konteks saat bekerja di panel Sumber. Saat melihat file, Anda dapat mengklik kanan di editor dan memilih Blackbox Script. Ini akan menambahkan file ke daftar di panel Pengaturan:
Solusi 2: Peristiwa Visual
Ini adalah alat yang sangat baik untuk memiliki :
Solusi 3: Debugging
Anda dapat menjeda kode ketika Anda mengklik suatu tempat di halaman, atau ketika DOM dimodifikasi ... dan jenis-jenis JS breakpoint lainnya yang berguna untuk diketahui. Anda harus mendaftar blackboxing di sini untuk menghindari mimpi buruk.
Dalam hal ini, saya ingin tahu apa yang sebenarnya terjadi ketika saya mengklik tombol.
Buka Alat Bantu -> tab Sumber, dan di sebelah kanan temukan
Event Listener Breakpoints
:Buka
Mouse
dan pilihclick
Solusi 4: Memancing kata kunci
Dengan Dev Tools diaktifkan, Anda dapat mencari seluruh basis kode (semua kode di semua file) dengan ⌘+ ⌥+ Fatau:
dan mencari
#envio
atau apa pun tag / kelas / id yang Anda pikir memulai pesta dan Anda mungkin mendapatkan tempat yang lebih cepat daripada yang diantisipasi.Berhati-hatilah kadang-kadang tidak hanya ada
img
tetapi banyak elemen yang ditumpuk, dan Anda mungkin tidak tahu yang mana yang memicu kode.Jika ini sedikit dari pengetahuan Anda, lihat tutorial Chrome tentang debugging .
sumber
Kedengarannya seperti bagian "... dan saya lompat baris demi baris ..." salah. Apakah Anda StepOver atau StepIn dan Anda yakin tidak secara tidak sengaja melewatkan panggilan yang relevan?
Yang mengatakan, kerangka kerja debug bisa membosankan untuk alasan ini. Untuk mengatasi masalah, Anda dapat mengaktifkan percobaan "Aktifkan dukungan debugging kerangka" . Selamat men-debug! :)
sumber
Anda dapat menggunakan findHandlersJS
Anda dapat menemukan pawang dengan melakukan di konsol chrome:
findEventHandlers("click", "img.envio")
Anda akan mendapatkan informasi berikut dicetak di konsol chrome:
aktual tempat pengendali event terdaftar
Array dengan informasi tentang penangan acara jquery untuk jenis acara yang menarik bagi kami (mis. klik, ubah, dll.)
Metode event handler aktual yang dapat Anda lihat dengan mengklik kanan dan memilih Tampilkan definisi fungsi
Selector yang disediakan untuk acara yang didelegasikan. Itu akan kosong untuk acara langsung.
Daftar dengan elemen-elemen yang ditargetkan oleh event handler ini. Misalnya, untuk pengendali acara yang didelegasikan yang terdaftar di objek dokumen dan menargetkan semua tombol di halaman, properti ini akan mencantumkan semua tombol di halaman. Anda dapat mengarahkannya dan melihatnya disorot dalam chrome.
Info lebih lanjut di sini dan Anda dapat mencobanya di situs contoh ini di sini .
sumber
Solusi ini membutuhkan metode data jQuery .
$._data($(".example").get(0), "events")
$._data()
hanya mengakses metode data jQuery. Alternatif yang lebih mudah dibacajQuery._data()
.Poin menarik dengan jawaban SO ini :
Versi jQuery agnostik akan menjadi:
(jQuery._data || jQuery.data)(elem, 'events');
sumber