document.onload なんてありません

ちょっと切ない JavaScript の話。

onload で複数の処理を行うために、Observer パターンを使おうと思ったわけです。ファサードになるファンクションを設けるのも良いけど、融通が利きにくいし。

というわけで、document にリスナーオブジェクトを登録&実行したんだけど、これがピクリとも動かない。原因は、document.onload が存在しないこと。何故。じゃあ、body タグに書く onload は何に対応するんだ。色々イジった結果、自作の処理とバインドできる onload は、window オブジェクトのそれだけの模様。

document.writeln(document.onload); // 結果は undefined
document.writeln(window.onload); //結果は null (バインド可能)

ちなみに、一番上のスコープで this と書くと、window を指すみたい。ということで、

this.addEventListner("doSomething", lintener1);
this.addEventListner("doSomething", lintener2);
this.onload = this.dispatchEvent(
                  {type:"doSomething", target:this}
              );

こんな形になりました。厄介だ。

このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt4/mt-tb.cgi/265
javascript from PukiWiki/TrackBack 0.2 at 2006年3月13日 04:01
javascript/ウィンドウサイズの変更 javascript/ページをプリントする javascript/1つのフォームから2つのCGIにsubmi... [続きを読む]
Anonymous at 2008年12月11日 20:25

body タグに書く onload は document.body.onload でいいはずです。

dT at 2008年12月15日 14:47

おっしゃるとおりで、bodyタグのonloadに対応するのは、 document.body.onload ですね。
ただ、document.body.onload は、FireFox が対応していないんですよね。

その意味では、window.onload の方が実用性があると思います。
コメントありがとうございました。