アプリ版:「スタンプのみでお礼する」機能のリリースについて

私はイベントリスナ登録時の匿名関数に渡す引数eの意味が今まで理解できていませんでした。
最近、下記コードを実行することで、

<script type='text/javascript'>
window.addEventListener ('click', function(e){
console.info(e);// 引数をコンソール表示 (要Firebug)
for (p in e){
console.info(p + ' = ' + e[p]);// プロパティを列挙
}
}, false);
</script>

「eventオブジェクトを渡しているらしい」と朧気ながら理解できました。
ただ、疑問点も残ります。
私の理解では、匿名関数は

(function(str){
alert(str);
})('Hello');

のように明示的に引数を渡さなければ、引き渡された値は undefined となるはずでした。

変数eの値はどこから出現したのでしょうか?
そもそも、変数eはeventオブジェクトなのでしょうか?

A 回答 (1件)

イベントハンドラにはイベントオブジェクトが自動的に渡されます。


https://developer.mozilla.org/ja/DOM/event

IEではwindowオブジェクトにeventが括り付けられていて参照可能となっているので、(たしか)このような動作はしませんね。
    • good
    • 0
この回答へのお礼

参考URLをありがとうございます。

> イベントハンドラにはイベントオブジェクトが自動的に渡されます。
下記を読み、関数の第一引数にeventオブジェクトが渡される事がわかりました。

-----
イベントハンドラは DOM のさまざまな element に 関連付けられる可能性があります。
イベントが発生したとき、event オブジェクトが動的に生成され、そのイベントを処理することになっているイベントリスナに逐次的に渡されます。このとき、DOM Event インターフェースは、イベントハンドラの関数の中で、その第一引数としてアクセス可能です。
-----

> IEではwindowオブジェクトにeventが括り付けられていて参照可能となっているので、(たしか)このような動作はしませんね。
IEでは window.event にイベントオブジェクトが入るのですね。
下記コードでIEでも動作させることが出来ました。

------
<p id='test'>test</p>
<!-- IEには window.onclick がないので、bodyを空にしないために適当な要素を入れる -->

<script type='text/javascript'>
(function(){
if(window.addEventListener){
window.addEventListener ('click', function(e){
console.info(e);
for (p in e){
console.info(p + ' = ' + e[p]);
}
}, false);
} else if(window.attachEvent){
document.body.attachEvent('onclick',function(){
alert('Hello!');

console.info(window.event);
for(p in window.event){
console.info(p + ' = ' + window.event[p]);
//console.info(p =);
}
});
}
})();
</script>
------

おかげさまでeventオブジェクトについてよくわかりました。
ありがとうございました。

お礼日時:2009/06/26 14:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!