どのJavaScriptイベントが発生したかを知る方法は?


122

選択リストがあります:

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

Closedページを選択するとリロードします。この場合、(オープンではなく)クローズされたチケットが表示されます。手動で行うとうまくいきます。

問題は、Watirで選択Closedしたときにページがリロードされないことです

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オプションと同じくらい強力かどうかはわかりませんが、ほとんどの場合十分です。

    少し異なるが驚くほど素晴らしいもう1つのオプションは、ビジュアルイベントです。http//www.sprymedia.co.uk/article/Visual+Event+2

    バインドされているページ上のすべての要素を強調表示し、呼び出された関数を示すポップオーバーがあります。ブックマークにはかなり気の利いた!Chromeプラグインもあります。それがあなたの好みであれば、他のブラウザについてはわかりません。

    AnonymousAndrewここで指摘していますmonitorEvents(window);


    2
    あなたが提案した方法のいずれかで発生したイベントを確認する方法を理解できませんでした。
    チェリコフィリピン

    1
    更新:これScriptsはDevツール(またはインスペクター)の内部にはありませんSources。右側にあるメニューに移動して確認する必要があります。
    aledalgrande

    @aledalgrandeありがとう、更新しました。(読んでいる人にとっては、これは最初のソリューションにのみ適用され、2番目は依然としてインスペクターを使用します)。
    Chris

    1
    この例として賛成ボタンを選んだ具体的な理由はありますか?:P
    ジョージディミトリアディス

    @GeorgeDimitriadis haha​​ sprung:P
    Chris

    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をする必要があります。
    Marcel Korpel、2010

    私はそれを数分前まで知りませんでした。私は質問を書いていて、途中で答えを見つけました。:)
    ジェリコ・フィリピン

    2
    Firebugの開発者による最近のブログエントリ:softwareishard.com/blog/firebug/firebug-tip-log-dom-events
    jakub.g

    1
    こんにちは、firebugを右クリックしてみましたが、[ログイベント]オプションが見つかりません。これを見つける方法を教えてください。
    Rajagopalan

    2
    こんにちは、Firbugプラグインはもうありません。では、どうすればこれを達成できますか?助けてください
    HimaaS

    71

    Chromeについては、コマンドラインAPIを介してmonitorEvents()をチェックアウトしてください。

    • メニュー>ツール> 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

    Google ChromeデベロッパーコンソールでgetEventListenersを使用できます。

    getEventListeners(object)は、指定されたオブジェクトに登録されているイベントリスナーを返します。

    getEventListeners(document.querySelector('option[value=Closed]'));
    弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
    Licensed under cc by-sa 3.0 with attribution required.