Як дізнатися, які події JavaScript запускалися?


122

У мене є список вибору:

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

Коли я вибираю Closedперезавантаження сторінки. У цьому випадку він показує закриті квитки (замість відкритих). Це добре працює, коли я це роблю вручну.

Проблема полягає в тому, що сторінка не перезавантажується, коли я вибираю за Closedдопомогою Watir :

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

Зазвичай це означає, що деякі події JavaScript не запускаються. Я можу розпочати події з Watir:

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

але мені потрібно знати, яку подію підпалити.

Чи є спосіб дізнатися, які події визначені для елемента?


Це питання наводить додаткові інструменти: stackoverflow.com/questions/570960 / ...
Желько Філіпін

2
Візуальна подія, sprymedia.co.uk/article/Visual+Event . Я впевнений, що це допоможе половині людей, які висаджуються на цю сторінку stackoverflow :)
Седрік,

Відповіді:


143

Просто подумав, я додам, що ви можете це зробити і в Chrome:

Ctrl+ Shift+ I(Інструменти для розробників)> Джерела> Точки переривання слухача подій (праворуч).

Ви також можете переглянути всі події, які вже були вкладені, просто клацнувши правою кнопкою миші на елементі та переглянувши його властивості (панель праворуч).

Наприклад:

  • Клацніть правою кнопкою миші кнопку оновлення ліворуч
  • Виберіть елемент огляду
  • Згорнути розділ стилів (розділ в крайньому правому куті - подвійний шеврон)
  • Розгорніть параметр слухачів події
  • Тепер ви можете бачити події, пов'язані з оновленням
  • Не впевнений, чи він такий потужний, як варіант firebug, але цього було достатньо для більшості моїх речей.

    Ще один варіант, який є дещо іншим, але дивно приголомшливим - це Visual Event: http://www.sprymedia.co.uk/article/Visual+Event+2

    Він висвітлює всі елементи на переплетеній сторінці та має перехоплення, що показують функції, що викликаються. Досить вишукано для закладки! Також є плагін Chrome, якщо це більше - не впевнений у інших браузерах.

    AnonymousAndrew також вказав тутmonitorEvents(window);


    2
    Я не міг зрозуміти, як побачити, які події розпочалися одним із запропонованих вами способів.
    Желько Філіпін

    1
    Оновлення: це не Scriptsвсередині інструментів Dev (або інспектора), ви повинні зайти Sourcesі переглянути меню праворуч.
    aledalgrande

    @aledalgrande Спасибі, оновили. (Для всіх, хто читає, це стосується лише першого рішення, друге все ще використовує інспектор).
    Кріс

    1
    Чи є якась конкретна причина, чому ви вибрали кнопку оновлення як приклад для цього? : P
    Георгій Димитріадіс

    @GeorgeDimitriadis haha ​​спливав: P
    Кріс

    112

    Схоже, Firebug ( додаток Firefox) має відповідь:

    • відкрити Firebug
    • клацніть правою кнопкою миші елемент на вкладці HTML
    • клацніть Log Events
    • включити вкладку Консоль
    • натисніть вкладку "Зберегти на консолі" (інакше вкладка "Консоль" очиститься після завантаження сторінки)
    • вибрати Closed(вручну)
    • на вкладці Консолі буде щось подібне:

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

    Джерело: Firebug Порада: журнал подій


    4
    Велике спасибі, я не знав про цю функцію Firebug. Можливо, мені потрібно справді RTFM деякий час.
    Марсель Корпель

    Я про це не знав лише кілька хвилин тому. Я писав питання і по дорозі знайшов відповідь. :)
    Желько Філіпін,

    2
    Нещодавній запис у розробнику Firebug у блозі: softwareishard.com/blog/firebug/firebug-tip-log-dom-events
    jakub.g

    1
    Привіт, я спробував правою кнопкою миші на firebug, але я не можу знайти параметр "Журнал подій".
    Раджагопалан

    2
    Привіт, плагін Firbug більше не є. Тоді як мені цього досягти? Будь ласка, допоможіть мені
    HimaaS

    71

    Що стосується Chrome, огляньте monitorEvents () за допомогою API командного рядка.

    • Відкрийте консоль через Меню> Інструменти> Консоль JavaScript.
    • Введіть monitorEvents(window);
    • Перегляньте консоль, залиту подіями

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

    Є й інші приклади в документації . Я здогадуюсь, ця функція була додана після попередньої відповіді.


    5
    Приємно! У поєднанні з jQuery:monitorEvents($('#element').get())
    Клаус

    1
    Для того, щоб припинити використання моніторингуunmonitorEvents(window)
    Augustas

    0

    Ви можете використовувати getEventListeners в консолі розробника Google Chrome .

    getEventListeners (об'єкт) повертає слухачам подій, зареєстрованим на вказаному об'єкті.

    getEventListeners(document.querySelector('option[value=Closed]'));
    Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
    Licensed under cc by-sa 3.0 with attribution required.