電子書籍の厳選無料作品が豊富!

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>イベント情報の取得</title>
</head>
<body>

<script type="text/javascript">
<!--
// ページのロード時に呼び出される関数initをセット
window.onload=init;

// ページのロード時に呼び出される関数
function init(){
// onclickイベントハンドラを定義
document.getElementById("txt").onclick=msg;
}
// onclickイベントハンドラ関数
function msg(evt){
// W3C DOMとIEの両方のイベントオブジェクトに対応
evt = (evt) ? evt : ((event) ? event : null);
alert(evt.type+"されました");
}
//-->
</script>

<div id="txt">クリックしてください</div>

</body>
</html>

上記のコードで【MozillaやOperaなどのブラウザでは、イベントハンドラ関数を設定した場合にも、関数の引数としてイベントオブジェクトが渡される】とのことですが、イベントハンドラ関数msgに渡されているevt【function msg(evt){】はいきなり出て、何を意味しているのかよくわかりません。
このコードを見て推測できる方、アドバイスをお願い致します。

A 回答 (2件)

>function msg(evt)


説明どおり。MozillaやOperaではイベントに関する各種情報=イベントオブジェクトを引数として渡してきます、それを受取るべくevtという名前の器(変数)を用意します。もちろん関数内での宣言ですから名前は何でも(evtでなくても)かまいません。
渡されたイベントオブジェクトを参照する事でイベントの種類や発生元(クリックならクリックしたオブジェクト)等々の情報が得られます。

>evt = (evt) ? evt : ((event) ? event : null);
IEではイベントハンドラの引数は空です。代わりにwindow.eventというグローバルオブジェクトにイベント情報が格納されています。

引数(evt)が得られてなければevtという名前でeventを参照できるようにします。
これでevt.typeでIEでもMozillaでも同じ変数で発生したイベントのタイプ(この例では"click"です)を参照できるようになります。

なお、イベントオブジェクト内のプロパティにも違いがあるので、これだけでブラウザの差異が完全に吸収されるわけではありません。
    • good
    • 1

>evt = (evt) ? evt : ((event) ? event : null);


これの少し前を参照
>function msg(evt){
ただの変数名

function での構文による括弧内の名前が何であるのか、もう一度文法を確認したら良いんじゃない?
いきなりもなにもfunctionっていきなり出てくるものだし。
少しくらい流れを追おうとしようよ。。。
    • good
    • 0

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