- - PR -
JavaScriptで正しくattachEventできない(IEで動かない)
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-03-14 22:42
JavaScript初心者です。よろしくお願いします。
ブラウザの画面上でクリックがある度に 任意のJavaScript関数を実行させたく(クロスブラウザで) addEventListenerとattachEventを使って実装を試みたのですが、 どうにもattachEvent(InternetExplore)の場合に動いてくれません。 (FireFox等、addEventListenerで動くブラウザでは動きました。) コードをシンプルにしてみましたが、 依然として動かず、原因がわからずにおります。 以下、検証用にシンプルにしたコードになります。 ◇◇期待する動き◇◇ ・HTMLをロードすると、 『dispAlert呼ばれました』というalert表示 『addListener呼ばれました』というalert表示 ・左clickをする度に『dispAlert呼ばれました』というalert表示 ◇◇コード◇◇ 〓〓〓HTML〓〓〓 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <title>実験</title> <script type="text/javascript" src="test.js"></script> </head> <body> test </body> </html> 〓〓〓HTML終わり〓〓〓 〓〓〓JavaScript(test.js)〓〓〓 function dispAlert(e){ alert('dispAlert呼ばれました'); } function addListener(){ if(window.attachEvent){ alert('addListener呼ばれました'); window.attachEvent('onclick',dispAlert); } } dispAlert(); addListener(); 〓〓〓JavaScript終わり〓〓〓 ◇◇実際の動き◇◇ ・HTMLをロードすると、 『dispAlert呼ばれました』というalert表示は出る 『addListener呼ばれました』というalert表示も出る ・左clickをしてもalertは表示されない なお、”window.attachEvent('onclick',dispAlert);”の部分を ”alert(window.attachEvent('onclick',dispAlert));”とすると Trueとポップアップが上がります。 原因はコードにはなく、実行環境にあるのでしょうか? お分かりになる方、ご教授下さい。 | ||||||||
|
投稿日時: 2009-03-15 01:44
window.attachEvent('onclick',dispAlert);
を document.body.attachEvent('onclick',dispAlert); に変えて <script type="text/javascript" src="test.js"></script> をbodyの後ろにやったら呼ばれました。 | ||||||||
|
投稿日時: 2009-03-15 23:49
返答ありがとうございます。
document.body.attachEvent('onclick',dispAlert); にすると確かに動きました。 とりあえずやりたいことを実現するという意味ではOKなのですが、 依然として疑問は残りますね。 window.attachEvent('onclick',XXXX); という記述はいろんなところで見かけるんですが、 私のサンプルはなぜ動かないんでしょうか? | ||||||||
|
投稿日時: 2009-03-16 00:06
>>いろんなところで見かける
例えばどこですか? ”かま”掛けていませんか?
参考までに上記の実行結果は、
こんな感じ。 [ メッセージ編集済み 編集者: ぴあちゃん 編集日時 2009-03-16 00:12 ] | ||||||||
|
投稿日時: 2009-03-16 00:51
>>いろんなところで見かける
>例えばどこですか? 私の手元の本とWEB上に。 window.attachEventで検索すれば90000件ほど。 ぴあちゃんさんのサンプルの意図するところが 理解できません。よければ噛み砕いてもらえますか。 | ||||||||
|
投稿日時: 2009-03-16 01:52
window.attachEventなら、いくらでもサンプルがあるかと思いますが、
windowオブジェクトのイベントの「onclick」のことを言っていますか? ぴあちゃんさんが仰るのは、 「windowオブジェクトにonclickってイベントなんてないんじゃない?」ってことでは。 実際に、 document.body.attachEvent('onclick',dispAlert); は動いて、 window.attachEvent('onclick',XXXX); は動いていないんですよね? もし、仰るサンプルが絶対動くというのならば、 後学のためにも実際に動くのを私も見てみたいです。 | ||||||||
|
投稿日時: 2009-03-16 10:08
>かつのりさん、ぴあちゃんさん
>「windowオブジェクトにonclickってイベントなんてないんじゃない?」ってことでは。 そのとおりですね。 「IEの場合windowオブジェクトにonclickイベントはない」可能性を全く疑っていませんでした。 返り値がTrueだったこともあり。。 大変勉強になりました。ありがとうございました。 | ||||||||
|
投稿日時: 2009-03-16 10:24
これは alert(window.attachEvent('onclickkkkk',dispAlert)); とかでもtrueになりますね。やるのであれば alert(window.onclick); ですかね。(undefinedが返るはず) |