Hangi JavaScript olaylarının tetiklendiğini nasıl öğrenebilirim?


122

Bir seçim listem var:

<select id="filter">
  <option value="Open" selected="selected">Open</option>
  <option value="Closed">Closed</option>
</select>

ClosedSayfanın yeniden yüklenmesini seçtiğimde . Bu durumda kapalı biletleri gösterir (açılmak yerine). El ile yaptığımda iyi çalışıyor.

Sorun şu ki, WatirClosed ile seçim yaptığımda sayfa yeniden yüklenmiyor :

browser.select_list(:id => "filter").select "Closed"

Bu genellikle bazı JavaScript olaylarının tetiklenmediği anlamına gelir. Watir ile olayları tetikleyebilirim:

browser.select_list(:id => "filter").fire_event "onclick"

ama hangi olayın ateşleneceğini bilmem gerekiyor.

Bir öğe için hangi olayların tanımlandığını bulmanın bir yolu var mı?


Bu soru daha fazla aracı listeler: stackoverflow.com/questions/570960/…
Željko Filipin

2
Görsel Etkinlik, sprymedia.co.uk/article/Visual+Event . Eminim ki bu
Cedric

Yanıtlar:


143

Bunu Chrome'da da yapabileceğinizi eklemeyi düşündüm:

Ctrl+ Shift+ I(Geliştirici Araçları)> Kaynaklar> Etkinlik Dinleyici Kesme Noktaları (sağda).

Ayrıca, öğeye sağ tıklayarak ve ardından özelliklerine göz atarak (sağdaki panel) zaten eklenmiş olan tüm olayları görüntüleyebilirsiniz.

Örneğin:

  • Soldaki olumlu oy düğmesine sağ tıklayın
  • İnceleme öğesini seçin
  • Stiller bölümünü daraltın (en sağdaki bölüm - çift şerit)
  • Olay dinleyicileri seçeneğini genişletin
  • Artık olumlu oyla ilişkili olayları görebilirsiniz
  • Kundakçı seçeneği kadar güçlü olup olmadığından emin değilim, ama çoğu şey için yeterliydi.

    Biraz farklı ama şaşırtıcı derecede harika olan başka bir seçenek de Görsel Etkinlik: http://www.sprymedia.co.uk/article/Visual+Event+2

    Bir sayfadaki ciltlenmiş tüm öğeleri vurgular ve çağrılan işlevleri gösteren açılır pencerelere sahiptir. Bir yer imi için oldukça şık! Bir Chrome eklentisi de var, eğer bu senin işin daha fazlasıysa - diğer tarayıcılardan emin değil.

    AnonymousAndrew ayrıca buradamonitorEvents(window);


    2
    Önerdiğiniz her iki yoldan da hangi olayların tetiklendiğini nasıl anlayacağımı çözemedim.
    Željko Filipin

    1
    Güncelleme: ScriptsGeliştirme araçlarının (veya denetçinin) içinde değil, içine girmeniz Sourcesve ardından sağdaki menüye bakmanız gerekir.
    aledalgrande

    @aledalgrande Teşekkürler, güncellendi. (Okuyan herkes için bu yalnızca ilk çözüm için geçerlidir, ikincisi hala denetçiyi kullanır).
    Chris

    1
    Buna örnek olarak olumlu oy düğmesini seçmenizin belirli bir nedeni var mı? : P
    George Dimitriadis

    @GeorgeDimitriadis haha ​​sprung: P
    Chris

    112

    Görünüşe göre Firebug (Firefox eklentisi) cevabı veriyor:

    • Firebug'ı aç
    • HTML sekmesindeki öğeye sağ tıklayın
    • Tıklayın Log Events
    • Konsol sekmesini etkinleştir
    • Konsol sekmesinde Kal'ı tıklayın (aksi takdirde Konsol sekmesi sayfa yeniden yüklendikten sonra temizlenir)
    • seç Closed(elle)
    • Konsol sekmesinde şuna benzer bir şey olacak:

      ...
      mousemove clientX=1097, clientY=292
      popupshowing
      mousedown clientX=1097, clientY=292
      focus
      mouseup clientX=1097, clientY=292
      click clientX=1097, clientY=292
      mousemove clientX=1096, clientY=293
      ...

    Kaynak: Firebug İpucu: Olayları Günlüğe Kaydet


    4
    Çok teşekkürler, Firebug özelliğini bilmiyordum. Belki de biraz zaman RTFM'ye ihtiyacım var.
    Marcel Korpel

    Birkaç dakika öncesine kadar bilmiyordum. Soruyu yazıyordum ve yanıtı yol boyunca buldum. :)
    Željko Filipin

    2
    Firebug geliştiricisinden yeni bir blog girişi: softwareishard.com/blog/firebug/firebug-tip-log-dom-events
    jakub.g

    1
    Merhaba, firebug'a sağ tıklamayı denedim ama Olayları Günlüğe Kaydet seçeneğini bulamıyorum, lütfen bunu nasıl bulacağım konusunda bana yardım edebilir misin?
    Rajagopalan

    2
    Merhaba, Firbug eklentisi artık yok. O zaman bunu nasıl başarmalıyım? Lütfen bana yardım et
    HimaaS

    71

    Chrome ile ilgili olarak, monitorEvents () 'i komut satırı API'sı aracılığıyla kontrol edin.

    • Konsolu Menü> Araçlar> JavaScript Konsolu aracılığıyla açın.
    • Giriş monitorEvents(window);
    • Olaylarla dolu konsolu görüntüleyin

      ...
      mousemove MouseEvent {dataTransfer: ...}
      mouseout MouseEvent {dataTransfer: ...}
      mouseover MouseEvent {dataTransfer: ...}
      change Event {clipboardData: ...}
      ...

    Belgelerde başka örnekler de var . Sanırım bu özellik önceki cevaptan sonra eklendi.


    5
    Güzel! JQuery ile bağlantılı olarak:monitorEvents($('#element').get())
    Klaus

    1
    İzlemeyi durdurmak içinunmonitorEvents(window)
    Augustas

    0

    Sen kullanabilirsiniz getEventListeners sizin de Google Chrome geliştirici konsoluna .

    getEventListeners (object), belirtilen nesneye kayıtlı olay dinleyicilerini döndürür.

    getEventListeners(document.querySelector('option[value=Closed]'));
    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.