以下のコードには重大な問題があることを理解していることから始めましょう。具体的には、event
パラメーターは関数に渡されません。私が理解できないのは、以下のコードで Chrome、Opera、Safari、Firefox、および IE がすべてevent
変数の扱いが異なる理由です。
$('#eventBtn').on('click', function() {
console.log(event);
event.preventDefault();
});
Chrome、Opera、および Safari では、上記のコードが機能します。IE は 2 行目で失敗し、Firefox はすぐに失敗します。テスト目的で、もう少し装飾を加えたjsFiddleを作成しました。console.log(event)
さまざまなブラウザーでの上記の出力:
Chrome バージョン 26.0.1410.64 m
MouseEvent {dataTransfer: null, toElement: button#superBtn, fromElement: null, y: 20, x: 33…}Opera バージョン 12.15 マウス
イベント
Safari バージョン6.0.2 (8536.26.17)IE バージョン 10.0.9200.16540
[オブジェクト MSEventObj]Firefox バージョン 20.0.1
参照エラー: イベントが定義されていません
Chrome、Opera、および Safari のこの「機能」は、他のブラウザーで予期しない動作を作成するコード化されたものではなく、意図したとおりに機能したためです。IE にもグローバルevent
変数がありますが、前述のブラウザーとは異なり、現在発生しているイベントにその変数を割り当てません。Firefox にはグローバル変数がないevent
ため、参照されるとすぐに失敗しevent
ます。
通常e
、すべてのブラウザで同じように失敗するイベント変数を表すために使用します。Chrome、Opera、および Safari に、event
このように割り当てるグローバル変数があるのはなぜですか? この動作はどこかに文書化されていますか? 変数の命名に使用しないこと以外event
に、この「機能」に対処するためのアドバイスはありますか?