SSブログ

srcElement [JavaScript]

event.srcElement プロパティ

event.srcElement

前回のエントリーで、addEventListenerattachEvent で動的に登録されたイベントハンドラが、イベント発生元の要素を知るために使う event.target プロパティを取り上げました。

そして、event.target プロパティが、Internet Explorer に対応していないことも書きました。

そこで使えるのが、event.srcElement プロパティです。

ところが。

やっぱりこいつにも、対応していないブラウザがあったり、ちょっと気になる動作をしたりする点があります。

まず、対応ブラウザについて。

event.srcElement プロパティに対応しているのは、Internet Explorer、Opera、Safari、Google Chrome といったところです。

Firefox は対応してないんです(代わりに、event.target プロパティを使います)。

つまり、Opera、Safari、Google Chrome といったブラウザは、event.target プロパティも、event.srcElement プロパティも使えるんです。

また、注意点として、前回同様 window の動的イベントに対する挙動が挙げられます。

例えば、window の onload イベントでイベントハンドラを起動させ、そのイベントハンドラが受け取った引数の event.srcElement プロパティを見てみると、ブラウザごとに以下のようになっています。

◆window イベントに対する event.srcElement プロパティの中身
ブラウザsrcElementプロパティ
Internet Explorer 8null
Firefox 3.6.13undefined
Opera 9.64HTMLDocument
Safari 5.0.3HTMLDocument
Google Chrome 8.0.552.215HTMLDocument

Internet Explorer に至っては null だとよ、はっはっはっ・・・・・・。

というわけで、window で動かしたいイベントハンドラは、いくつか制約が出てきます(前回のエントリーの繰り返しですが、書いておきます)。

  1. window がひとつであることがわかっており、かつ window 用のイベントハンドラが他と切り分けられる場合、event.srcElement プロパティを無視し、window インスタンスを使って、しかるべき処理を実装する。
  2. どうしてもイベント発生元の window インスタンスを知りたい場合、イベントハンドラに匿名関数などを仕込み、ハンドルしたい処理関数に対して引数でインスタンス参照を投げてやる。

・・・・・・など。

今回の検証に使ったソースは、こちらです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>srcElemet</title>
    <script type="text/javascript">
    //<![CDATA[

        // 環境エラー
        function errorEnvironment() {
            alert('ご使用の環境では、このスクリプトはご使用できません。');
        }

        // イベントを追加する addEvent
        function addEvent(evt, func, cap) {
            if (this.addEventListener)
                this.addEventListener(evt, func, cap);
            else if (this.attachEvent)
                this.attachEvent('on' + evt, func);
            else
                errorEnvironment();
        }
        Object.prototype.addEvent = addEvent;
        HTMLDocument.prototype.addEvent = addEvent;
        Element.prototype.addEvent = addEvent;

        // ボタンのクリック
        function onButtonClick(evt) {
            document.getElementById('Text1').value = evt.srcElement;
        }

        // ウィンドウ ロードでボタン クリック イベントを追加
        window.addEvent('load',
            function (evt) {
                var elm = document.getElementById('Button1');
                elm.addEvent('click', onButtonClick, false);
                document.getElementById('Text2').value = evt.srcElement;
            },
            true
        );

        //]]
    </script>
</head>
<body>
    <input id="Button1" type="button" value="button" /><br/>
    <input id="Text1" type="text" /><span>srcElement</span><br />
    <input id="Text2" type="text" /><span>srcElement(window)</span><br />
</body>
</html>

次回は、event.target プロパティと event.srcElement プロパティの差異を吸収する実装方法を予定しています。


nice!(3)  コメント(9)  トラックバック(1) 
共通テーマ:パソコン・インターネット

nice! 3

コメント 9

One-for-you

IEはnullなんですね、、、ユニークですねw 個性でしょうか?w
by One-for-you (2010-12-19 00:50) 

みみちゃん

IEは、タ●ですね;;;。
Firefox が一番まっとうな気がします。
by みみちゃん (2010-12-19 11:47) 

ゆうみ

なるほどね。
今 IE と Google と firefox使い比べ中
素人だから良くわからないけど わからないなりに 何か感じるかと思ってね。
by ゆうみ (2010-12-19 13:05) 

みみちゃん

ソネブロだけでも、ブラウザの違いは感じられますよ。
記事の本文や追記を書いているとき、IE だと右クリックで出てくるコンテキストメニューで [コピー] や [貼り付け] ができるけど、なにも拡張してない Firefox だと、これができません。
不便でしゃーない;;;。
by みみちゃん (2010-12-19 17:41) 

ゆうみ

これは 実感したよ。
Googleもそうだった。
あと行間がせまいのもこの二つ
なんでなんだかわからなかったけど・・・
by ゆうみ (2010-12-20 12:46) 

みみちゃん

そうなんですよ!
ソネブロの記事エディターは、ブラウザによって、記事に埋め込まれる HTML タグが違うんですよ!
だから、見た目が変わっちゃうんですね。
困ったもんです;;;。
by みみちゃん (2010-12-20 19:46) 

One-for-you

さて、本題。。。なんで復習の如く遡及してコメント書いているかというと、貴殿があまりに記事書いてるから、ついていけないから、まず復習Modeに入ってます。  この先は、しばし読ませて頂きながら(時間かかるのは明白ですが)、Referenceしながら咀嚼Modeに入りたい の でした 

以上、ひたすら復習に徹する 言い訳 でした

そんな 言い訳で 良いわけ??? 
ご容赦下されwww

裏、書いたよ! <-一応、宣伝w

では、また、シラフの時に、ねw
by One-for-you (2010-12-28 01:22) 

One-for-you

そうそう、HTMLのTagは、プロ語無きがするよ
でもね、そのまま突っ走って、そのほうが、自己学習意欲が沸くからw
by One-for-you (2010-12-28 01:23) 

みみちゃん

どじょどじょw。
いやいや、ホントは、コメントを頂いて、マジでありがたいんです。
自分でコツコツやってるだけだと、どれだけ自分に「ストイック」になれるかの勝負になってくるので、コメントや nice! を頂けると、ホントにありがたいんですよね。
応援してもらってる気持ちになるというか・・・・・・;;;。

なお、この blog は、自分が会社で見れるリファレンス&ノウハウ集に育てたいと思っています。
なので、自分が自宅で培って会社で見たい情報は、容赦なくエントリーにさせて頂きますwww。
by みみちゃん (2010-12-28 15:35) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 1

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。