2013-04-30 14 views
11

私は以下のコードに大きな問題があることを理解しています。具体的には、eventパラメータは関数に渡されません。 Chrome、Opera、Safari、Firefox、IEのすべてのコードで、eventの変数が異なるように扱われている理由はわかりません。クロム、オペラ、およびSafariで「イベント」変数にブラウザ間で予期しないアクセスがありますか?

$('#eventBtn').on('click', function() { 
    console.log(event); 
    event.preventDefault(); 
}); 

上記のコードは動作します。 IEは2行目で失敗し、Firefoxはすぐに失敗します。テストの目的のために、私は少しより多くのより飾られたjsFiddleを作成しました。さまざまなブラウザで上記console.log(event)の出力:意図したとおりに他のブラウザで予期しない動作を作成するコード化されたとして、それはない働いていたので

Chrome Version 26.0.1410.64 m
MouseEvent {dataTransfer: null, toElement: button#superBtn, fromElement: null, y: 20, x: 33…}

Opera Version 12.15
MouseEvent

Safari Version 6.0.2 (8536.26.17)
MouseEvent

IE Version 10.0.9200.16540
[object MSEventObj]

Firefox Version 20.0.1
ReferenceError: event is not defined

私はクローム、オペラ、およびSafariのこの「機能」により、ビットでした。 IEにはグローバル変数eventがありますが、前述のブラウザとは異なり、現在実行中のイベントにはその変数を割り当てません。 Firefoxにはグローバル変数eventがないため、eventが参照されるとすぐに失敗します。

通常、私はすべてのブラウザで同じように期待通りに失敗するイベント変数を表すためにeを使用します。なぜ、Chrome、Opera、Safariのグローバル変数がeventになるのですか?この動作はどこかに記録されていますか?他に、この "機能"を扱うためのアドバイスを何らかの名前を付けて使用するのに、eventを使用しないでください。

+0

あなたの関数は 'event'をパラメータとしてとらないので、' event'を関数コンテキストに定義すべきではありません。 – nullability

+1

可能な重複は、コールバックチェーン内のどこでもアクセス可能なグローバル変数ですか?](http://stackoverflow.com/questions/6426497/is-event-a-global-variable-that-is-accessible-everywhere -inside-the-callback-cha) – Barmar

+1

@nullabilityそれは彼の質問のポイントです:彼はそれが定義されることを期待していませんでしたが、それはほとんどのブラウザにあります。その説明については私がリンクした質問を参照してください。 – Barmar

答えて

5

IEは、W3C標準の規定とは異なり、常にグローバル変数eventを提供しています。他のブラウザは、以前のIEバージョンを使用して開発されたWebサイトとの下位互換性を考慮して、同じことをしています。

While IE also has a global event variable, unlike the aforementioned browsers it does not assign that variable to the event that is currently firing.

私はそう信じています。

+0

私はIE9以前の動作をテストしていませんが、少なくともIE10はありません。 – ahsteele

+0

Hmの場合、互換モードでない場合、IEは標準に準拠しています。 Chromeとは異なり... – bfavaretto

関連する問題