Saya perlu men-debug aplikasi web yang menggunakan jQuery untuk melakukan manipulasi DOM yang cukup rumit dan berantakan . Pada satu titik, beberapa peristiwa yang terikat pada elemen tertentu, tidak dipecat dan berhenti bekerja.
Jika saya memiliki kemampuan untuk mengedit sumber aplikasi, saya akan menelusuri dan menambahkan banyak pernyataan Firebug console.log()
dan komentar / potongan tanda komentar kode untuk mencoba menunjukkan masalah. Tapi mari kita asumsikan saya tidak dapat mengedit kode aplikasi dan perlu bekerja sepenuhnya di Firefox menggunakan Firebug atau alat serupa.
Firebug sangat pandai membiarkan saya menavigasi dan memanipulasi DOM. Namun, sejauh ini, saya belum dapat menemukan cara melakukan debugging acara dengan Firebug. Secara khusus, saya hanya ingin melihat daftar penangan acara terikat ke elemen tertentu pada waktu tertentu (menggunakan Firebug JavaScript breakpoint untuk melacak perubahan). Tetapi Firebug tidak memiliki kemampuan untuk melihat peristiwa terikat, atau saya terlalu bodoh untuk menemukannya. :-)
Ada rekomendasi atau ide? Idealnya, saya hanya ingin melihat dan mengedit acara yang terikat pada elemen, sama seperti cara saya mengedit DOM hari ini.
if (window.console)
seandainya ada dalam kode (jauh lebih mudah dilakukan daripada dengan waspada ()) dan merusak IE.$('#foo').click(function(event) { var events = $(this).data('events'); $.each(events, function(event, handlers) { $.each(handlers, function(key, handlerObj) { console.log("--------------------------------------"); console.log(event+"["+key+"] | "+handlerObj.handler) ; }); });
Ada bookmarklet bagus bernama Visual Event yang dapat menunjukkan semua acara yang dilampirkan pada elemen. Ini memiliki highlight kode warna untuk berbagai jenis acara (mouse, keyboard, dll.). Ketika Anda mengarahkan kursor pada mereka, itu menunjukkan tubuh pengendali acara, bagaimana itu dilampirkan, dan nomor file / baris (di WebKit dan Opera). Anda juga dapat memicu acara secara manual.
Itu tidak dapat menemukan setiap peristiwa karena tidak ada cara standar untuk mencari tahu apa yang dilampirkan oleh penangan acara ke suatu elemen, tetapi ia bekerja dengan perpustakaan populer seperti jQuery, Prototype, MooTools, YUI, dll.
sumber
Anda bisa menggunakan FireQuery . Ini menunjukkan setiap peristiwa yang dilampirkan ke elemen DOM di tab HTML Firebug. Ini juga menunjukkan data apa pun yang dilampirkan ke elemen melalui
$.data
.sumber
Berikut adalah plugin yang dapat mencantumkan semua penangan acara untuk setiap elemen / acara yang diberikan:
Gunakan seperti ini:
Src: (blog saya) -> http://james.padolsey.com/javascript/debug-jquery-events-with-listhandlers/
sumber
Konsol Pengembang WebKit (ditemukan di Chrome, Safari, dll.) Memungkinkan Anda melihat acara yang dilampirkan untuk elemen.
Lebih detail dalam pertanyaan Stack Overflow ini
sumber
Gunakan
$._data(htmlElement, "events")
di jquery 1.7+;ex:
$._data(document, "events")
atau$._data($('.class_name').get(0), "events")
sumber
Seperti yang disarankan kolega, console.log> lansiran:
sumber
jQuery menyimpan acara sebagai berikut:
Melakukan
console.log($("a#somefoo").data("events"))
harus daftar acara yang dilampirkan ke elemen itu.sumber
Menggunakan DevTools di Chrome terbaru (v29) saya menemukan dua tips ini sangat membantu untuk debugging acara:
Membuat daftar acara jQuery dari elemen DOM yang dipilih terakhir
Memanfaatkan perintah monitorEvents ()
sumber
Sepertinya kru FireBug sedang mengerjakan ekstensi EventBug. Ini akan menambahkan panel lain ke FireBug - Acara.
"Panel acara akan mencantumkan semua penangan acara pada halaman yang dikelompokkan berdasarkan jenis acara. Untuk setiap jenis acara, Anda dapat membuka untuk melihat elemen yang terikat oleh pendengar dan ringkasan sumber fungsi." EventBug Meningkat
Meskipun mereka tidak bisa mengatakan sekarang kapan akan dirilis.
sumber
Saya juga menemukan jQuery Debugger di toko chrome. Anda dapat mengklik item dom dan itu akan menunjukkan semua peristiwa terikat padanya bersama dengan fungsi panggilan balik. Saya sedang debug aplikasi di mana acara tidak dihapus dengan benar dan ini membantu saya melacaknya dalam hitungan menit. Jelas ini untuk chrome, bukan firefox.
sumber
ev
ikon di sebelah elemenDi dalam panel Inspektur Alat Pengembang Firefox berisi daftar semua peristiwa yang terikat pada suatu elemen.
Pertama pilih elemen dengan Ctrl+ Shift+ C, mis. Panah upvote Stack Overflow.
Klik
ev
ikon di sebelah kanan elemen, dan dialog terbuka:Klik pada
||
simbol tanda jeda untuk acara yang Anda inginkan, dan ini membuka debugger pada baris pawang.Anda sekarang dapat menempatkan breakpoint di sana seperti biasa di debugger, dengan mengklik margin kiri garis.
Ini disebutkan di: https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Examine_event_listeners
Sayangnya, saya tidak dapat menemukan cara untuk ini bermain dengan baik dengan prettyfication, sepertinya terbuka di baris yang diperkecil: Bagaimana cara mempercantik Javascript dan CSS di Firefox / Firebug?
Diuji pada Firefox 42.
sumber
Menurut utas ini , tidak ada cara di Firebug untuk melihat acara apa yang dilampirkan pada pendengar pada elemen DOM.
Tampaknya yang terbaik yang dapat Anda lakukan adalah apa yang disarankan oleh tj111, atau Anda dapat mengklik kanan elemen di penampil HTML, dan klik "Log Acara" sehingga Anda dapat melihat acara mana yang sedang menembakkan untuk elemen DOM tertentu. Saya kira orang bisa melakukan itu untuk melihat peristiwa apa yang bisa memicu fungsi tertentu.
sumber
Dengan versi 2.0 Firebug memperkenalkan panel Acara , yang mencantumkan semua peristiwa untuk elemen yang saat ini dipilih dalam panel HTML .
Ini juga dapat menampilkan pendengar acara yang terbungkus dalam jQuery binding acara jika opsi Show Wrapped Listeners dicentang, yang dapat Anda jangkau melalui menu opsi panel Acara .
Dengan panel itu alur kerja untuk men-debug event handler adalah sebagai berikut:
=> Eksekusi skrip akan berhenti pada baris pertama dari fungsi event handler dan Anda dapat men-debug-nya.
sumber
Firebug 2 sekarang menggabungkan debugging / inspeksi acara DOM.
sumber