
以下の理解で合っているのでしょうか?
よくイベントの取得で
エレメント.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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jqueryのselect2で検索欄の文字...
-
二次元配列を使って順位をだす...
-
プラグイン無しでContactform7...
-
画面遷移を行わずに同一ページ...
-
ラジオボタンを複数選択したと...
-
Adobe acrobat proでフォームを...
-
jsonテキストデータの並び替え...
-
タグを教えてください。
-
jsで質問です。 formをsubmitし...
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
Outlookのアカウントがあるとメ...
-
<tr>指定した表の行要素をボ...
-
食材の期限を管理するためにGAS...
-
ビデオのJSについて
-
鍵盤アプリで、スマホの画面に...
-
<div>のタッチ状態を維持したま...
-
jQueryでシンセサイザーを作っ...
-
プログラミング 学習
-
HTMLでサブフレームから親のス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Webページ中の javascript をVB...
-
フォルダ内のファイル名を取得...
-
ローカルのレジストリを読みたい
-
Shell.ApplicationでのIEオブ...
-
イベントevt?evt.target:event....
-
javaScriptでグローバル変数に...
-
クラス デフォルトプロパティの...
-
ASP.NETでURLにマッピングされ...
-
タブブラウザで focus() を実...
-
JSの「document.getElementById...
-
画面間でのJavaScrip...
-
エクセル2010のvbaについて
-
イベントリスナに登録される fu...
-
strictモードでなぜエラーにな...
-
javascritの(e)または(event)に...
-
event.srcElementの動的設定
-
一定時間経つと画像を消す方法
-
Googleカレンダーリスト表示
-
JSPの処理の途中で、JavaScript...
-
以下のコードを実行しても、オ...
おすすめ情報