イベントオブジェクトにアクセスする

説明

Internet Explorerではeventオブジェクト、他ブラウザではイベントハンドラにイベントオブジェクトが渡されます。eventオブジェクト自体はSafari 2でもOperaでも存在しInternet Explorer同様にアクセスすることができます。ただし、Firefoxではeventオブジェクトではなく、イベントハンドラにイベントオブジェクトを渡すようになってます。標準的な仕様に合わせるのであればFirefoxとなりますが、ブラウザごとに対応が異なるためサンプルのようにイベントオブジェクトの有無に応じてInternet Explorerと他ブラウザで処理を分ける必要があります。
また、イベントオブジェクトで扱われる各種プロパティも互換性のあるものは、かなり限られるため扱いには注意が必要です。特にイベント発生時の座標値に関してはブラウザごと(Firefox、Safari 2、Internet Explorer)に異なるため注意が必要です。

JavaScriptテクニック ブック  詳しい解説などはJavaScriptテクニック ブックを参照してください。

サンプルコード [実行]

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>JavaScript Sample</title>
<link rel="stylesheet" type="text/css" href="main.css" media="all">
<script type="text/javascript" src="main.js"></script>
</head>
<body>
<h1>イベントオブジェクトにアクセスする</h1>
<form action="./event.cgi" method="get" name="mainForm">
<input type="button" id="checkButton" value="クリックしてください"><br>
</form>
<div id="result">結果:</div>
</body>
</html>

window.onload = function(){
document.getElementById("checkButton").onclick = function(evt){
if (!evt) {
document.getElementById("result").innerHTML = event.x +","+ event.y+"<br>";
document.getElementById("result").innerHTML += event.srcElement.id;
}else{
document.getElementById("result").innerHTML = evt.pageX +","+ evt.pageY+"<br>";
document.getElementById("result").innerHTML += evt.target.id;
}
}
}