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}
ここで注意しなければらないことがあります。
イベント登録時には、以下のようなコードで行うのが一般的です。
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}
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image
posted by FJT at 22:34| javascript