2012-03-29 14 views
1

イベントハンドラ(onmousemoveなど)が動的に割り当てられるjavascriptコードが頻繁に表示されます。 例:javascriptイベントハンドラの「イベント」パラメータはどこから来ますか?

document.getElementById('foo').onmousemove = function(e) 
{ /* do some stuff with event e */ } 

どうやらこの 'E' パラメータは、イベントオブジェクトのいくつかの種類です。関数が呼び出されたときに、この 'e'パラメータが何であるかを誰が定義するのですか?また静的なhtmlでもこれを行うことができますか?私は、同じイベントの事を得るために「E」のために記入すべきである何

<div id='foo' onmousemove='Bla(e)'> ... </div> 

: は、私はこのような意味ですか?

<div id='foo' onmousemove='Bla(this,e,4)'> ... </div> 

ここで、eはやはりイベントオブジェクトであるはずです。

+1

私はあなたのコールバックイベントハンドラに渡される 'window.event'への参照だと思います。 – asawyer

+0

はい、ありがとう、ちょうど偶然によって同様の何かを見つけました。私自身のイベントハンドラ(たとえhtmlで設定されたものであっても、必ずしも関数(e)の種類の関数ではない)内でwindow.eventを使うことができるようです。 –

答えて

1

イベントオブジェクトは、任意のイベントハンドラの内部にwindow.eventに格納されているため、パラメータとして受け入れることに従うハンドラについて心配する必要はありません。 (あなたがグローバルeを持っていない限り)は、変数eはそのスコープ内に存在しないため、2番目と3番目の例で

は、eパラメータは未定義として渡されます。

3

イベントハンドラは、callbackメソッドと定義されています。コールバックは、後で別のプロセスから呼び出される(したがって式)。これは、イベントが発生したときの環境(この場合はブラウザ)によって行われます。

コールバック関数を呼び出し、event objectを渡します。

+0

イベントハンドラ関数を動的に(つまりコード内で)割り当てると、パラメータがイベントオブジェクトであることを1つのパラメータ関数と見なします。また、そのイベントオブジェクトを '静的な'イベントハンドラで取得する方法もあります。これは、htmlで設定されているものを意味します(私の2 divの例のように)。 –

+1

@SheldonPinkman:はいそのように定義されています。また、機能を持たないイベントオブジェクトにはアクセスできません。 – jAndy

+0

OKありがとう!ああ、私は誤ってwindow.eventがイベントを含んでいるようです(静的なイベントハンドラで動作するようです)。とにかく、そのコールバックのものは、今私には明らかです、もう一度ありがとう! –

0

これはコールバックメソッドと呼ばれています。このイベントは、オペレーティングシステムによって最初に作成され、Webブラウザに送信され、javascriptのEventオブジェクトに渡されます。

0

私はよく分かりませんが、イベントはActionEventのオブジェクトインスタンスだと思います。私はActionEventを手動でインスタンス化することはできないと思うので、静的なHTMLでそれを行うことはできません。それが可能であっても、それは確かにベストプラクティスではないでしょう。