web-dev-qa-db-ja.com

FFがwindow.eventが未定義であると言うのはなぜですか? (イベントリスナーが追加された関数を呼び出す)

私はこの部分に問題があります:

var ex = {
  exampl: function(){
    var ref=window.event.target||window.event.srcElement; // here
    alert(ref.innerHTML); // (example)
  }
}

この関数は次のように呼び出されます。

document.body.childNodes[0].addEventListener('mouseover',ex.exampl,true);

Firefoxのみがwindow.eventは定義されていません...

私はそれを機能させるために何をすべきかわかりません。 Webkitブラウザーでは非常にうまく機能し、opera(MSIEでは確認できず、気にしません)。

なぜ起こるのですか?

29
anony_root

渡されたパラメーター(この場合はeという名前)を使用してイベントを取得してください。これと両方をテストしましたwindow.eventおよびeはchromeでサポートされています。

どちらか存在する方を確認してください

var ex = {
  exampl: function(e){

    console.log(window.event);
    console.log(e);  

    //check if we have "e" or "window.event" and use them as "evt"
    var evt = e || window.event    

  }
}
22
Joseph

_window.event_は機能ではなく、バグです!

引用 [〜#〜] mdn [〜#〜]

_window.event_は、Microsoft Internet Explorer独自のプロパティであり、DOMイベントハンドラーが呼び出されている間のみ利用可能です。その値は、現在処理されているEventオブジェクトです。

最も重要な:

仕様の一部ではありません。

_window.event_は非標準であるため、anyがそれをサポートすることを期待しないでください。

element.addEventListener()のコールバック関数の最初のパラメーターはEventオブジェクトです。 _window.event_の代わりに使用します。

16

なぜならwindow.eventはFirefoxには存在しません。これは、ブラウザーにはさまざまなイベントモデルがあり、それらの違いに対処するか、ブラウザー間のすべての違いに対処する必要がないようにjQueryのようなライブラリを使用する必要があるためです。 DOMへようこそ。

15
mpm

Chromeにもネイティブではありません。すべてのイベントトリガーが独自のイベントオブジェクトを渡すのではなく、IEプロパティをwindow.eventにドロップし、それを渡しました。一度に1つのイベントしか処理しないため、これは機能しました。すべてのブラウザには、イベントオブジェクトの実際のコンストラクタであるwindow.Eventが必要です。IE8以下以外で「window.event」が表示されている場合は、空のタブでコンソールを開いて、そこにログを記録するかアラートを出します。見ているページに何かを手動で追加しています。

イベントハンドラーのクロスブラウザー正規化コードを見ると、次のことがよくわかります。

if(!e){ e = window.event; }

IEの古いバージョンを処理するコードを正規化するイベントです。最新のブラウザでは、eはウィンドウのプロパティへの参照ではなく、引数を介して渡される独自のオブジェクトである必要があります。

5
Erik Reppen

window.eventFirefoxバージョン63以降 (2018年10月下旬リリース予定)で利用可能になります。

0

jQueryを使用します。

let e = $.Event();

https://api.jquery.com/category/events/

0
Vampire