Chrome'u kullanarak bir öğeye hangi etkinliklerin bağlı olduğunu bulma


148

Sayfamda bir bağlantım olduğunu varsayalım:

<a href="#" id="foo">Click Here</a>

Başka bir şey bilmiyorum, ama bağlantıya tıkladığımda bir alert("bar")görüntülenir. Yani bir yerde, bazı kodların bağlı olduğunu biliyorum #foo.

alert("bar")Click olayına bağlanan kodu nasıl bulabilirim ? Chrome ile bir çözüm arıyorum.

Ps .: Örnek kurgusal, bu yüzden "XXXXXX kullanın ve" uyarı (\ "bar \") "için tüm projeyi aramak gibi bir çözüm aramıyorum. Gerçek bir hata ayıklama / izleme çözümü istiyorum.

Yanıtlar:


140

Kullanılması Krom 15.0.865.0 dev . Elements panelinde bir "Etkinlik Dinleyicileri" bölümü vardır:

resim açıklamasını buraya girin

Ve Komut Dosyaları panelinde bir "Olay Dinleyici Kesme Noktaları". Fare -> kesme noktasını tıklayın ve ardından kullanıcı alanı işlevinin olayı nasıl işlediğini görmek için arama yığını üzerinde tutarak "bir sonraki işlev çağrısına geçin" İdeal olarak, jQuery'nin küçültülmüş sürümünü değiştirilmemiş bir sürümle değiştirirsiniz, böylece her zaman adım atmanız gerekmez ve mümkün olduğunda adım atmanız gerekir.

resim açıklamasını buraya girin


10
Yaklaşıyorum, ancak oradaki sonuçların çoğu ... jquery.min.js :( satırının 16 nını gösteriyor. jQuery?
FMaz008

Bu araçların tümü Chrome 12.0.742.100'de de mevcuttur. :) Teşekkürler !
FMaz008

13
@Fluffy: Yapmanıza gerek yok. Sadece { }js görüntülerken sol alt köşedeki sembolü tıklayın . Sihirli.
Hannes Schneidermayer

JQuery'nin karmaşık olay gönderme kodunu atlamak büyük bir acıdır. Aşağıdaki jQuery Denetim yanıtı ( stackoverflow.com/a/30487583/24267 ) çok daha iyi.
mhenry1384

3
Jquery'yi çağrı yığınından hariç tutmak için, komut dosyasını kara kutuya koyun : developer.chrome.com/devtools/docs/blackboxing @ IonuțG.Stan veya mods, yanıtı kara kutuya referansla güncelleyebilir misiniz - ortak bir soru gibi görünüyor bu cevapla alakalı.
Chris Hynes

47

Ekli etkinlikleri aşağıdaki gibi başka bir şekilde bulmak için Chrome'un denetçisini de kullanabilirsiniz:

  1. İncelemek için öğeye sağ tıklayın veya 'Öğeler' bölmesinde bulun.
  2. Ardından 'Etkinlik Dinleyicileri' sekmesinde / bölmesinde etkinliği genişletin (örneğin 'tıklama')
  3. İstediğiniz birini bulmak için çeşitli alt düğümleri genişletin ve ardından 'işleyici' alt düğümünün nerede olduğunu arayın.
  4. 'İşlev' kelimesini sağ tıklayın ve ardından 'İşlev tanımını göster'i tıklayın

Bu sizi, aşağıdaki resimde gösterildiği gibi işleyicinin tanımlandığı yere götürür ve Paul Irish tarafından burada açıklanır: https://groups.google.com/forum/#!topic/google-chrome-developer-tools/NTcIS15uigA

'İşlev tanımını göster'


iki yaşında ve hala bu soruya en iyi cevap.
Stuart

16

Yükledikten sonra jQuery Denetim uzantısını ( https://chrome.google.com/webstore/detail/jquery-audit/dhhnpbajdcgdmbbcoakfhmfgmemlncjg ) deneyin :

  1. Elemanı inceleyin
  2. Yeni ' jQuery Denetimi hakkında ' sekmesinde Events özelliğini genişletin
  3. İhtiyacınız olan Etkinlik için seçin
  4. İşleyici özelliğinden sağ işlevi üzerinde tıklayın ve 'seçeneğini göster işlevi tanımı '
  5. Şimdi Etkinlik bağlama kodunu göreceksiniz
  6. Kodun daha okunabilir bir görünümü için ' Güzel baskı ' düğmesine tıklayın

1
Bu mükemmel bir uzantıdır ve JavaScript aracılığıyla eleme ile zaman kazanır.
Neil Monroe

Sık sık "Olay Dinleyicileri" nin "Olay dinleyicisi yok" listelediğini ve "Olay dinleyicisi kesme noktaları"> Fare> Tıklama'yı seçmenin bir kesme noktası oluşturmadığını görüyorum. Bu eklenti çok iyi çalışıyor.
StuartN

@Javier> harika bir yanıt. Javascript (jQuery olmayan) bir mekanizma için çalışır mı?
Mahefa

11

(2020 itibariyle en son) Chrome Sürüm 83.0.4103.61 sürümü için :

Chrome Geliştirici Araçları - Etkinlik Dinleyici

  1. İncelemek istediğiniz öğeyi seçin

  2. Etkinlik Dinleyicileri sekmesini seçin

  3. Jquery işlevi yerine gerçek javascript dosyasını göstermek için Framework dinleyicilerini kontrol ettiğinizden emin olun.


6

Düzenleme : kendi cevabım yerine, bu oldukça mükemmel: Firebug (veya benzer bir araç) ile JavaScript / jQuery olay bağlamaları hata ayıklama

Google Chromes geliştirici araçlarının komut dosyaları bölümünde yerleşik bir arama işlevi vardır

Bu araca aşina değilseniz: (her ihtimale karşı)

  • sayfanın herhangi bir yerine sağ tıklayın (kromda)
  • 'Öğeyi Denetle'yi tıklayın
  • 'Komut Dosyaları' sekmesini tıklayın
  • Sağ üstteki arama çubuğu

#ID için hızlı bir arama yapmanız sizi sonunda ciltleme işlevine götürmelidir.

Örn: aramak #foosizi

$('#foo').click(function(){ alert('bar'); })

resim açıklamasını buraya girin


4
Güzel bir başlangıç, ancak #foo'ya 1500 referansım varsa, çoğu bir şey bağlamayan veya mevcut komut dosyasında tetiklenmeyen harici komut dosyalarında birden fazla #foo kimliğim olduğunda?
FMaz008

Harika bir soru. Deneyimlerime göre, insan hata ayıklama işlemi genellikle burada başlar :)
Michael Jasper

1
Hehe, haklısın, ama sorum aynı zamanda bir insan olarak ne yapmam gerektiğiyle ilgili: p
FMaz008


4

findEventHandlers bir jquery eklentisidir, ham kod burada: https://raw.githubusercontent.com/ruidfigueiredo/findHandlersJS/master/findEventHandlers.js

adımlar

  1. Ham kodu doğrudan krom konsoluna yapıştırın (not: jquery önceden yüklenmiş olmalıdır)

  2. Aşağıdaki işlev çağrısını kullanın: findEventHandlers(eventType, selector);
    karşılık gelen seçicinin belirtilen öğenin eventType işleyicisini bulmak için.

Örnek :

findEventHandlers("click", "#clickThis");

Sonra, varsa, mevcut olay işleyicisi feryat gösterecektir, işleyiciyi bulmak için genişletmeniz, işlevi sağ tıklamanız ve show function definition

Bkz. Https://blinkingcaret.wordpress.com/2014/01/17/quickly-finding-and-debugging-jquery-event-handlers/


3

Chrome Sürüm 52.0.2743.116 için:

  1. Chrome'un Geliştirici Araçları'nda, Ctrl+ Shift+ düğmesine basarak 'Ara' panelini açın F.

  2. Bulmaya çalıştığınız öğenin adını yazın.

Bağlı öğelerin sonuçları panelde görünmeli ve içinde bulundukları dosyayı belirtmelidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.