Saya telah melihat pertanyaan-pertanyaan ini:
- Bagaimana menemukan event listener pada simpul DOM saat debugging atau dari kode JavaScript?
- dapatkah saya secara terprogram memeriksa dan memodifikasi event handler Javascript pada elemen html?
- Cara men-debug JavaScript / jQuery event binding dengan Firebug (atau alat serupa)
namun tidak satupun dari mereka menjawab bagaimana mendapatkan daftar event listener yang dilampirkan ke sebuah node menggunakan addEventListener
, tanpa memodifikasi addEventListener
prototipe sebelum event listener dibuat.
VisualEvent tidak menampilkan semua pendengar acara (yang khusus iPhone) dan saya ingin melakukan ini (agak) secara terprogram.
javascript
dom-events
Tyilo
sumber
sumber
Jawaban:
Chrome DevTools, Safari Inspector, dan Firebug mendukung getEventListeners (node) .
sumber
Tidak boleh.
Satu-satunya cara untuk mendapatkan daftar semua event listener yang dilampirkan ke node adalah dengan mencegat panggilan lampiran listener.
DOM4 addEventListener
Says
Artinya pendengar acara ditambahkan ke "daftar pendengar acara". Itu saja. Tidak ada gagasan tentang apa daftar ini seharusnya atau bagaimana Anda harus mengaksesnya.
sumber
Karena tidak ada cara asli untuk melakukan ini, Berikut adalah solusi yang tidak terlalu mengganggu yang saya temukan (jangan tambahkan metode prototipe 'lama'):
sumber
Anda bisa mendapatkan semua kejadian jQuery menggunakan $ ._ data ($ ('[selector]') [0], 'events'); ubah [selector] menjadi apa yang Anda butuhkan.
Ada sebuah plugin yang mengumpulkan semua event yang dilampirkan oleh jQuery yang disebut eventsReport.
Juga saya menulis plugin saya sendiri yang melakukan ini dengan format yang lebih baik.
Tapi bagaimanapun tampaknya kami tidak bisa mengumpulkan acara yang ditambahkan dengan metode addEventListener. Mungkin kita bisa membungkus panggilan addEventListener untuk menyimpan acara yang ditambahkan setelah panggilan bungkus kita.
Tampaknya cara terbaik untuk melihat peristiwa ditambahkan ke elemen dengan alat pengembang.
Tetapi Anda tidak akan melihat acara yang didelegasikan di sana. Jadi di sana kita membutuhkan jQuery eventsReport.
PEMBARUAN: SEKARANG Kita BISA melihat acara yang ditambahkan dengan metode addEventListener LIHAT JAWAB KANAN UNTUK PERTANYAAN INI.
sumber
Saya tidak dapat menemukan cara untuk melakukan ini dengan kode, tetapi di Firefox 64 stok, acara dicantumkan di sebelah setiap entitas HTML di Developer Tools Inspector seperti yang tercantum di halaman Periksa Event Listeners MDN dan seperti yang ditunjukkan dalam gambar ini:
sumber