またまた"Prototype.js"についてのちょっとしたメモ
下記のような簡単なスクリプトで
document.observe('dom:loaded', function(event) {
var item = new Image();
item.src = 'image.jpg';
$$('body')[0].insert(item);
item.observe('click', function(event) {
alert(event.element().src);
});
});
SafariやFirefox、Operaでは問題なく写真をクリックしたときにイベントが実行される
ところがIEでは実行されない。ステータスバーにはエラーのアイコン。
メッセージを見てみると"item.observe('click', function(event){})"の部分が問題ありらしい
itemオブジェクトに対してうまくイベントが設定されないようだ。
これは下記のようにすればうまくいったりする。
document.observe('dom:loaded', function(event) {
var item = new Image();
item.src = 'images/small/IMG_08.jpg';
$$('body')[0].insert(item);
Event.observe(item, 'click', function(event) {
alert(event.element().src);
});
});
ただ単に'item.observe'としているか'Event.observe'としているかの違いだが、これは多分
var item = new Image();
この部分が原因なのだろう。
普段Prototype.jsを使っているとPrototype特有のメソッドなのか、Javascriptネイティブのメソッドなのか分からなくなってしまうがこの
new Image();
はJavascriptネイティブのメソッドだ。
そしてIE以外ではそれらから得たオブジェクトも'Prototype'による拡張がされているんだと思う。
ところがIEでだけその魔法(?)がかからずエラーになってしまう・・。という事なんだろう。
実際
var item = new Image();
の所を
var item = new Element('img');
と、するだけでうまくいくし、或いは
var item = new Image();
と、この状態のまま
$(item).observe('click', function(event) {});
と、$()で囲ってやるだけでもいい
似たような理由でIE以外だと
document.body.insert(elem);
はうまくいくがIEだと
$(document.body).insert(elem);
か
$$('body')[0].insert(elem);
こうしないと駄目だ
カテゴリ:
トラックバック(0)
トラックバックURL: http://blog.beanz-net.jp/beanz_mtos/mt-tb.cgi/78
コメントする