アフィリエイト広告を利用しています
最新記事
日別アーカイブ

広告

posted by fanblog

2012年07月12日

fireEvent 関係を使う場合の注意

イベントを起動させる処理として、fireEvent と createEvent ~ dispatchEvent があります。
ここで注意しなければらないことがあります。

イベント登録時には、以下のようなコードで行うのが一般的です。

if(window.addEventListener) {
 window.addEventListener(〜);
} else if(window.attachEvent) {
 window.attachEvent(〜);
}

これは、まず addEventListener がサポートされているかを判定して、あれば使います。
無ければ、attachEvent がサポートされているかを判定して、あれば使います。

ここに、イベント起動の処理を以下のように考えてみましょう。

if(window.fireEvent) {
 window.fireEvent(〜);
} else if(window.createEvent) {
 var evt = window.createEvent(〜);
 evt.initEvent(〜);
 window.dispatchEvent(evt);
}

コードをこのようにすると、IE9で不具合があります。

まず、イベント登録処理ですが、IE9は attachEvent だけではなく、
addEventListener にも対応しています。
つまり、IE9の場合は addEventListener でイベント登録されます。

次にイベント起動処理ですが、ここではIE9の場合、IE固有の fireEvent が起動します。
このとき、addEventListener で登録したイベントは fireEvent で動かない、
または不安定な動きになるようです。

正しく動かすためには、addEventListener よりも前に
attachEvent を判定すればよいことになります。


{a8.net http://books.livedoor.com/item/1752906}
【このカテゴリーの最新記事】
posted by FJT at 22:34| javascript
プロフィール
FJTさんの画像
FJT
使えそうな技術情報を掲載しています。 ぜひ、役立ててください。
プロフィール
リンク集
×

この広告は30日以上新しい記事の更新がないブログに表示されております。