• ベストアンサー

イベントハンドラに下記記述があるのですが、どういう

・イベントハンドラに下記記述があるのですが、どういう意味でしょうか?   if (window.event) {   event = window.event;   }

  • re97
  • お礼率80% (601/744)

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

  • ベストアンサー
  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.2

イベントハンドラは、発生したイベントの詳細を知りたい場合があります。 たとえば「画像をクリックした際の座標」が必要な場合です。 むかーしのブラウザでは、こう書いていました イベントの詳細はグローバル変数である window.event で調べています <img src=hoge.jpg onclick="alert(window.event.offsetX + ',' + window.event.offsetY)"> その後、マルチスレッド安全性とか整合性とかのために、 イベントの詳細はイベントハンドラの引数で調べられるようになりました 要素.onclick = function(event){  alert(event.clientX + ',' + event.clientY); }; ですが、ブラウザによっては引数に渡さない仕様のままだったので、 安全の為に以下の様に記述するようになりました。 要素.onclick = function(event){  event = event? event: window.event; // 引数がないならグローバル変数を取る  alert(event.clientX + ',' + event.clientY); }; というわけで、「昔のクロスブラウザ対策におけるイベントの詳細の取り方」と推測します。 ちなみに現在では、すべてのブラウザで以下の記述になります。 要素.addEventListener('click', function(event){  alert(event.clientX + ',' + event.clientY) }, false);

re97
質問者

お礼

回答&詳しい解説ありがとうございました。 大変勉強になりましたー

その他の回答 (1)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

もしも window.event が取得できたら 変数eventの値をwindow.eventに置き換える っていう意味よ window.eventがundefinedの場合 if文はfalseになるの http://d.hatena.ne.jp/unageanu/20070705/1183627496 この辺にif文の中に入っているものによって trueなのかfalseなのかが一覧されているので参考にするといいと思うわ

re97
質問者

お礼

回答ありがとうございましたー

関連するQ&A

  • IE7におけるonresizeイベントハンドラについて

    お世話になります。 IE7を使用しているのですが、window.onrisizeイベントハンドラがうまく機能しないようなのですが、これはIE7の仕様なのでしょうか? また、IE7以外のブラウザでwindow.onrisizeイベントハンドラが機能しないようなブラウザはあるのでしょうか? ご存知の方がいらっしゃいましたら、よろしくお願いいたします。

  • C# イベントハンドラについて

    http://bbs.wankuma.com/index.cgi?mode=al2&namber=70546 ここで紹介されているソースをさんこうにしていたのですが、 public event EventHandler TextBox1Changed; が果たしている役割がよくわかりません。 これは何のためにあるのでしょうか? たとえば、 http://dobon.net/vb/dotnet/vb2cs/event.html コチラのサイトでは、 public event EventHandler Time; と System.Threading.Thread.Sleep(5000); if (Time != null) { Time(this, EventArgs.Empty); } のように書かれていますが、いきなりif (Time != null)を記述してエラーがでないということは、Cのプロトタイプ宣言のような機能を有しているのでしょうか? また、この例ではなにもしないので具体的な使い方もみえてこず、この次の例はすでに理解を超えていてさっぱりわかりません。 イベントハンドラはいったいどのような役割を担っているのでしょうか?

  • C#にイベントハンドラ(object sender, EventArg

    C#にイベントハンドラ(object sender, EventArgs e) に引数を追加して、 イベントハンドラに値を渡したいのですが、 どのように記述したらいいのでしょうか?

  • 配列コントロールのイベントハンドラ記述方法

    こんにちは。 配列trackbar(100)でValueChangedイベントハンドラを一括記述したいのですが、うまく動きません。方法ご教示ください。よろしくお願いします。 Private Sub changeTrackBarValue(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles TrackBar().ValueChanged  '処理を記述 End Sub

  • イベントハンドラが取得できない VC++ MFC

    おはようございます(><) VC++.NETで開発を行っています。 MFCを使って開発をしています。 CDialogを継承したCmyDialogでOnLButtonDownのイベントがとれません。 OnLButtonDownのイベントを使いたかったのですが 自動でイベントを設定するプロパティのメニュー(雷のマークみたいなもの)にイベントがなかったので 自分でCmyDialog::と書いたらリストの中に OnLButtonDown( UINT nFlags,CPoint point)がでたので 定義に追加、イベントの記述を追加しました。 雷マークで作ったイベントのコードには // TODO : ここにコントロール通知ハンドラ コードを追加します。 と自動で記述され、ブレイクポイントを設定するとそこで止まるのですが 私が記述したLButtonDownのイベントでは実行してもブレイクポイントで止まりません。 他のイベントと比べて違うのは BEGIN_MESSAGE_MAP(CmyDialog, CDialog)の中に ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST1, OnLvnColumnclickList1) のように イベントハンドラ名、リソース名?、イベント名 と自動で記述があります。 ここを追加すればいいのかなと思いましたが 左クリックに対応するイベントハンドラ名が分かりません。 問題解決に有効な情報をお持ちの方 お力をお貸しください。 よろしくお願いします(><)

  • C++ Builder6のイベントハンドラーの参考書

    C++Builder6の初心者です。 イベントハンドラーの使い方が分かりません。 確かに、例題を挙げたものが出版されておりますが 記述を読んでも何故そうなるのか理解できません。 初心者にでも参考になる本等がありましたら教えて 頂きたくお願いします。

  • イベントハンドラメソッドに関して教えてください

    お世話になります。イベントハンドラメソッドについて教えてください。 -----JS----- function f() { window.alert("Click"); } ---(1) document.myform.mybtn2 = function(){ ---(2) window.alert("Click"); } -----HTML----- <form id="myform" name="myform"> <input type="button" id="mybtn1" name="mybtn1" value="Click" onclick="f()" /> ---(1) <input type="button" id="mybtn2" name="mybtn2" value="Click" /> ---(2) </form> Q:上記のコードで(1)の場合だと正常にalert画面が出ますが、(2)の場合だと何も起こりません。 FirefoxのJavaScriptコンソールで調べると下記のエラーが表示されます。 documnet.myform has no propaties なぜエラーが発生するのか分からずに困っています。 解決の手がかりでもよいので教えてください。

  • オブジェクトとイベントにつきまして

    javascript超初心者です。。 今仮に、スクリプトの中でメソッド、プロパティ、イベントやイベントハンドラの前に、オブジェクトを入れるとします。(たとえば、window.aleart~など) その中でも、イベントやイベントハンドラをスクリプトの中に書くとして、ナビゲーターオブジェクトをその前に書く時、documentなのかwindowなのか、また他のオブジェクトなのか、使い分け方が分かりません。 大変稚拙な質問で申し訳ありませんが、javascriptの先輩方、どういうイベント(イベントハンドラ)の時にwindowで、どういうイベント(イベントハンドラ)の時にdocumentなのか等、ご回答頂けると本当に助かります。 どうぞよろしくお願い致します。

  • イベントハンドラ関数について

    現在VC++/CLR 2005 でプログラミングをしています。 基本的な事柄かもしれませんが、質問させてください  以下の2つのボタンのイベントハンドラ関数があった場合 //ボタン1のイベントハンドラ関数 private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) String^ str = textBox1->Text } //ボタン2のイベントハンドラ関数 private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { } ボタン2をクリックしたときの動作とボタン1の動作を同じにしたいと思っています。 その場合は private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) String^ str = textBox1->Text } //ボタン2のイベントハンドラ関数 private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { String^ str = textBox1->Text } のようにボタン2のイベントハンドラ関数をボタン1と同じように書けばいいのですが イベントハンドラ関数の処理が膨大になった場合を考えて省略する 書き方は無いのでしょうか?(以下の場合ですとエラーが起こってしまいます。) private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { button1_Click(); } 宜しくお願いします

  • イベントハンドラをタグ外に記述するには

    <input type="submit" value="submit" class="btn" > で記述したボタンにロールオーバーを設定したいのですが、訳あってinput内に書くことができません。 色々と調べて試してみたのですが上手くいかないので、どなたか教えていただけませんか? よろしくお願いします。 私が試した方法は、<head></head>内に <script TYPE="text/javascript"> <!-- startEvent("window","load","Over") function Over(){ startEvent("document.forms[0].elemens[1]","onmouseover","Color"); } function Color(){ document.forms[0].elemens[1].style.backgroundColor = "orange"; } --> </script> 以上を記述するという方法です。

専門家に質問してみよう