
以下の理解で合っているのでしょうか?
よくイベントの取得で
エレメント.onclick = function(evt){
var e = evt?evt.target:event.srcElement;
}
でeにイベントオブジェクトの発生元要素をセットしているのを見かけますが、
これは、ブラウザーの違いの吸収なのでしょうか?
firefoxでは、イベントハンドラー関数にイベントオブジェクトが渡されるので、渡されたイベントオブジェクトよりevt.targetで発生元要素をセットし、一方IEでは、eventという名前のオブジェクトが存在している(?)ので、イベントハンドラー関数にイベントオブジェクトが渡されず、event.srcElementで発生元要素をセットする。
※Opera、Safariは何でも良い
IEの場合、後から、イベントが追加されたらeventオブジェクトはどうなるのでしょうか?ある要素の一つのイベントタイプには一つのイベントハンドラーしか定義できないのでしょうか?
No.1ベストアンサー
- 回答日時:
> ある要素の一つのイベントタイプには一つのイベントハンドラーしか定義できないのでしょうか?
attachEvent() を使えば、複数のイベントハンドラを定義できそうです。(未検証)
また、attachEvent() の第一引数からイベントオブジェクトを取得できる、とbabu_babooさんに教わりました。
http://okwave.jp/qa5081024.html?ans_count_asc=1
ただ、attachEvent は実行順が不定という欠点があるので、現実的には「出来ない」という結論になると思います…。
addEventListenerとattachEventでは実行される順番が違う at HouseTect, JavaScripter Blog
http://hisasann.com/housetect/2008/09/addeventli …
IEのイベント実行順序は不定? - inamenaiの日記
http://d.hatena.ne.jp/inamenai/20080915/p1
IEが addEventListener() に対応してくれればいいのですが…。
この回答への補足
ところで、think46様の「イベントリスナに登録される function(e){} の "e" はeventオブジェクト?」
http://okwave.jp/qa5075946.html
の中で、前から気になってて、ちょっと解らないところがあるのですが、
質問に関係ないjavascriptの基本的な事かも知れませんが、
匿名関数を
(function(str){
alert(str);
})('Hello');
というふうに書いていますが、
なぜ、後ろの()の中身が前の()の中の関数の引数に渡されるのでしょうか?
これは、
エレメント.onclick = (function(e){
alert(e); //eはalertできませんが
})();
と
エレメント.onclick = function(e){
alert(e);
}
と書くのは同じですか?
No.4
- 回答日時:
#1です。
> なぜ、後ろの()の中身が前の()の中の関数の引数に渡されるのでしょうか?
匿名関数(無名関数)に関しては、私も完全に理解できているわけではないので、私の理解している範囲での説明になりますが…。
まず、名前付きの関数定義をしてみます。
-------
function test(str){
alert(str);
}
test('Hello');
-------
関数名 "test" を取り除きます。
-------
function(str){
alert(str);
}
('Hello');
-------
このままでは、エラーになります。
function部分を括弧で括り、エラーを回避します。(どういう理屈かはわかりません)
-------
(function(str){
alert(str);
})
('Hello');
-------
改行を取り除きます。
-------
(function(str){
alert(str);
})('Hello');
-------
「なぜfunctionを括弧でくくるのか?」
この点はずっと疑問に思っていて、いつか質問しようと思っていました。
いい機会なので質問してみます。
匿名関数の定義と実行 - 昼間のメモ
http://blog.goo.ne.jp/hiuchida/e/431b5beb4adeb31 …
匿名関数と (function(){ ... })(); について : JavaScript 備忘録
http://blog.livedoor.jp/jsmemo/archives/767707.h …
エレガントな JavaScript を作成するための関数型プログラミングの使用
http://www.ibm.com/developerworks/jp/web/library …
JavaScript講座 : 関数の定義
http://www.openspc2.org/JavaScript/kouza2007/fun …
代わりに別途質問していただいてありがとうございました。
その解答をみて納得できたような気がします。
functionもオブジェクトであるから、それを踏まえて
var hoge = function(str){alert(str);};
hoge("Hello");
と
(function(str){alert(str);})('Hello');
を良く眺めると同じに見えました。
No.3
- 回答日時:
document.onclick = (function(INT) {
return function(e) {
var tmp = INT(1.41421356237);
var e = e ? e.target: event.srcElement;
alert([tmp, e.tagName]);
};
})(Math.floor);
ごみか?
No.2
- 回答日時:
>これは、ブラウザーの違いの吸収なのでしょうか?
じぶんてきには。そのつもり。
うるおぼえなのでくわしいせつめいは、するーします。
「いべんとばぶりんぐ」で、けんさくすればかいけつのいとぐちが?
http://www.tagindex.com/kakolog/q4bbs/1601/1871. …
ここをよんで、いべんとは、おおもとで、かんしするだけで
いいじゃん!ってことで、じぶんでは、documentのいべんとを
かんしすることがおおいです
IEのいべんとは、ぐろーばるなので、そのときのいべんとが、
さんしょうしたときに、それとはかぎらない。
なので、attachEventをつかったり・・・。
ここのいたでは、わかりやすさをゆうせんさせているひとが
おおいのか(?)そのかきかたが、ふきゅうしないというか・・・。
じぶんで、じしんをもってせつめいできないのがいたい!?
だからいつまでたっても、かいとうのこーどをとうこうするときは、
「いっぱんじん」でなおかつ、「さんこういけん」なんだよね~^^;
「せんもんか」といえるひとたちの、いけんをまとう!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- その他(趣味・アウトドア・車) 寝台特急カシオペアについて 2 2023/06/10 13:59
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- その他(プログラミング・Web制作) Pythonのオブジェクトの関数について 2 2023/05/11 19:15
- JavaScript Google reCAPTCHAについて 1 2023/02/22 14:37
- 英語 atが1文で二回出てくるのはおかしいですよね。すっきりした英文にしたいです。教えてください。 1 2023/03/24 20:20
- その他(プログラミング・Web制作) LINEアプリの開発について。オブジェクトの名前が教えてください 1 2023/02/23 09:31
- Java 複数TBLのオブジェクトを1つの変数(オブジェクト)でまとめて管理したい 1 2022/12/17 00:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSを学ぶ前に、、、
-
エクセル2010のvbaについて
-
ブラウザが開いているかどうか
-
event.srcElementの動的設定
-
javascript 親オブジェクトと子...
-
タブブラウザで focus() を実...
-
チェックボックスを認識・不認...
-
画面間でのJavaScrip...
-
safariではロールオーバー機能...
-
JSでファイル数取得
-
gas 全角数字を半角数字に変換
-
JavaScriptでiframeの高さを自...
-
エディタ機能のTEXTAREAを作りたい
-
IE7でdocument.styleSheets[n]....
-
PHPを使って作成したボタンをク...
-
JavaScriptでショートカットキ...
-
JavaScriptでフォームの入力項...
-
HTAで,親ウインドウを閉じ...
-
JavaScriptを使えない環境につ...
-
javascriptでのmdb接続について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javaScriptでグローバル変数に...
-
ローカルのレジストリを読みたい
-
Webページ中の javascript をVB...
-
jQueryで、listの要素数を取得...
-
JavaScript 日数計算の関数で演...
-
JavaScriptは具体的に何ができ...
-
Javascript; フィールドの属性変更
-
イベントevt?evt.target:event....
-
Javascriptの全ての文法やオブ...
-
JavaScriptで複数のプロパティ...
-
CGIを呼び出した場合の戻り値を...
-
JSの「document.getElementById...
-
オライリーのプログラミングPHP...
-
split
-
エクセル2010のvbaについて
-
evtとは
-
クラス デフォルトプロパティの...
-
jquery か javascript で json ...
-
ASP.NETでURLにマッピングされ...
-
Dateオブジェクトの大小比較の...
おすすめ情報