ここから本文です

ページの読み込みが完了したあとに関数を実行方法の質問

lam********さん

2011/11/1121:24:55

ページの読み込みが完了したあとに関数を実行方法の質問

window.onload=somefunction;と<body onload="somefunction()">では、 <body onload="somefunction()">は推奨でなく、その理由の「イベントハイドラをあとから 変更する必要が生じた時にそれらを見つけだすことが難しくなる」 とJavascriptクックブックに載っていたのですが、意味が分かりません。分かりやすく説明頼みます。

閲覧数:
444
回答数:
2
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

ris********さん

編集あり2011/11/1201:35:19

読んでいませんが、後で onload の内容を書き換えたいときに、<body onload="..."> の方は全ページの onload 属性を書き換えねばならないのに対し、window.onload = ... の方は 1 個の外部スクリプトを書き換えれば済む、といった内容ではないでしょうか。


---
以下余談。

しかし個人的な意見を申し上げれば、上記は onload 属性を避ける理由としては弱いと思います。というのは、<body onload="handleLoadEvent.call(this, event);"> のようにして、onload 属性の中身をアダプタというかプロキシというか、そういうものにすれば済む話だからです。

この場合、handleLoadEvent() をグローバル関数にしなければなりません。これが欠点と言えば欠点ですが、慣れればさほど大きな問題にはなりません。

他にも理由がありますが、初学者のうちはかえって <body onload="..."> の方がマシだと、私は思います。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

spa********さん

編集あり2011/11/1122:19:37

直接参照していないからです。


解説:
先ず、問題の箇所をHTML表記からJavaScript表記に変更します。
すると、body onload="somefunction()" が body.onload = new Function("somefunction()");になります。
この両者を比較してみると、
window.onload がsomefunctionwをさしているのにたいし、
body.onload はsomefunctionをさしていないので、見つけるのがシンドイ。

ってことです。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる