• ベストアンサー

HTMLに書き込むことなく、イベントを制御する方法

よく、HTMLに <img src="yyy.gif" onMouseover="this.src='xxx.gif'"> というふうにイベントハンドラを設定するのを見かけますが、 <script>タグ内で document.onclick = 関数名; となっているのもあります。 後者の方が、スマートのような気がするのですが、その書き方とか、仕様をしっかり理解できてないようなので質問します おそらく、これに限らず基礎的なことだと思います 1、 document.onclick = の後に指定できるのは、関数名の他に何があってどう書くのか? 2、 document.onclick = funcEx(); としないで document.onclick = funcEx; とするのはなぜか? 引数は設定できないのか? 3、 <script>内から、指定した要素のイベントを制御する方法がほかにあれば 教えてください 以上、どれかひとつでも、複数でもいいので、回答もらえるとありがたいです

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

1) XXXX.onclick=function(){…} というように名前のない関数(イベントだけで使われるので、特に名前が必要ない)が書けます。(関数リテラルといいます) 2) 関数オブジェクトにカッコを付けると関数呼び出しになります。 引数は関数定義の方で設定しておきます。 イベントハンドラへの登録なので、この時には引数を設定する意味はありません。 イベントで呼び出される関数に引数が必要かどうかは、ブラウザによっても違います。ネットスケープ系だとイベントを引数で受けて、例えば押されたキーなどを取得することができます。IEでは、イベントは、イベントハンドラないでwindow.eventを使用するので、引数では受けません (ポインタといっていいかどうかは微妙ですが、javascriptではポインタ型のタイプはありません、関数オブジェクトです) 3)IEの場合 <SCRIPT FOR="test" EVENT="onmouseover" type="text/javascript"> window.event.srcElement.style.fontWeight="bold"; </SCRIPT> <SCRIPT FOR="test" EVENT="onmouseout" type="text/javascript"> window.event.srcElement.style.fontWeight="normal"; </SCRIPT> <a href="#" ID="test">test</a> のように、IDで指定したモノのイベントの種類を指定してスクリプトを設定することができます。

その他の回答 (1)

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

参考URLの「イベントハンドラをHTMLから分離する」の各記事が参考になるかと思います。 他は参考URLにあると思うので2についてだけ。 document.onclick = funcEx(); これでは、この行を実行するときにfuncExを呼び出して実行し、その返値をonclickに代入する命令になってしまいます。 document.onclick = funcEx; ()を省略する事で関数へのポインタを表します。これをonclickに代入します。

参考URL:
http://allabout.co.jp/career/javascript/library/mlibrary6.htm
noname#12205
質問者

お礼

なるほど ありがとうございます

関連するQ&A