Come scoprire quali eventi JavaScript sono stati attivati?


122

Ho un elenco di selezione:

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

Quando seleziono Closedla pagina si ricarica. In questo caso mostra i biglietti chiusi (anziché aperti). Funziona bene quando lo faccio manualmente.

Il problema è che la pagina non si ricarica quando seleziono Closedcon Watir :

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

Di solito ciò significa che alcuni eventi JavaScript non vengono attivati. Posso attivare eventi con Watir:

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

ma ho bisogno di sapere quale evento attivare.

C'è un modo per scoprire quali eventi sono definiti per un elemento?


Questa domanda elenchi più strumenti: stackoverflow.com/questions/570960/...
Željko Filipin

2
Evento visivo, sprymedia.co.uk/article/Visual+Event . Sono sicuro che questo aiuterà la metà delle persone che approdano a questa pagina dello stackoverflow :)
Cedric

Risposte:


143

Ho solo pensato di aggiungere che puoi farlo anche in Chrome:

Ctrl+ Shift+ I(Strumenti per sviluppatori)> Sorgenti> Punti di interruzione del listener di eventi (a destra).

È inoltre possibile visualizzare tutti gli eventi che sono già stati allegati semplicemente facendo clic con il pulsante destro del mouse sull'elemento e quindi sfogliandone le proprietà (il pannello a destra).

Per esempio:

  • Fare clic con il pulsante destro del mouse sul pulsante di voto positivo a sinistra
  • Seleziona ispeziona elemento
  • Comprimi la sezione degli stili (sezione all'estrema destra - doppio chevron)
  • Espandi l'opzione dei listener di eventi
  • Ora puoi vedere gli eventi legati all'upvote
  • Non sono sicuro che sia potente quanto l'opzione firebug, ma è stato sufficiente per la maggior parte delle mie cose.

    Un'altra opzione un po 'diversa ma sorprendentemente fantastica è Visual Event: http://www.sprymedia.co.uk/article/Visual+Event+2

    Evidenzia tutti gli elementi di una pagina che sono stati associati e dispone di popover che mostrano le funzioni chiamate. Abbastanza elegante per un segnalibro! C'è anche un plug-in di Chrome se questo è più la tua passione, non sono sicuro degli altri browser.

    AnonymousAndrew ha anche sottolineato quimonitorEvents(window);


    2
    Non sono riuscito a capire come vedere quali eventi si sono verificati in nessuno dei modi che hai suggerito.
    Željko Filipin

    1
    Aggiornamento: non è Scriptsall'interno degli strumenti Dev (o ispettore), devi entrare Sourcese quindi guardare il menu a destra.
    aledalgrande

    @aledalgrande Grazie, ho aggiornato. (Per chiunque legga, questo vale solo per la prima soluzione, la seconda utilizza ancora l'ispettore).
    Chris

    1
    C'è un motivo specifico per cui hai scelto il pulsante di voto positivo come esempio per questo? : P
    George Dimitriadis

    @GeorgeDimitriadis haha ​​scattato: P
    Chris

    112

    Sembra che Firebug (componente aggiuntivo di Firefox) abbia la risposta:

    • apri Firebug
    • fare clic con il pulsante destro del mouse sull'elemento nella scheda HTML
    • clic Log Events
    • abilitare la scheda Console
    • fare clic su Persistenza nella scheda Console (altrimenti la scheda Console verrà cancellata dopo che la pagina è stata ricaricata)
    • seleziona Closed(manualmente)
    • ci sarà qualcosa di simile nella scheda Console:

      ...
      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
      ...

    Fonte: Suggerimento Firebug: log eventi


    4
    Grazie mille, non sapevo di quella funzione Firebug. Forse ho bisogno di RTFM per un po 'di tempo.
    Marcel Korpel

    Non lo sapevo fino a pochi minuti fa. Stavo scrivendo la domanda e ho trovato la risposta lungo la strada. :)
    Željko Filipin

    2
    Un recente post sul blog dello sviluppatore di Firebug: softwareishard.com/blog/firebug/firebug-tip-log-dom-events
    jakub.g

    1
    Ciao, ho provato a fare clic con il tasto destro su Firebug ma non riesco a trovare l'opzione Registra eventi, puoi aiutarmi a trovare questo?
    Rajagopalan

    2
    Ciao, il plugin Firbug non esiste più. Allora come dovrei raggiungere questo obiettivo? Per favore aiutami
    HimaaS

    71

    Per quanto riguarda Chrome, controlla monitorEvents () tramite l'API della riga di comando.

    • Apri la console tramite Menu> Strumenti> Console JavaScript.
    • accedere monitorEvents(window);
    • Visualizza la console inondata di eventi

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

    Ci sono altri esempi nella documentazione . Immagino che questa funzione sia stata aggiunta dopo la risposta precedente.


    5
    Bello! Insieme a jQuery:monitorEvents($('#element').get())
    Klaus

    1
    Per interrompere l'uso del monitoraggiounmonitorEvents(window)
    Agosto

    0

    Puoi utilizzare getEventListeners nella tua console per sviluppatori di Google Chrome .

    getEventListeners (oggetto) restituisce i listener di eventi registrati sull'oggetto specificato.

    getEventListeners(document.querySelector('option[value=Closed]'));
    Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
    Licensed under cc by-sa 3.0 with attribution required.