• 締切済み

外部ファイルにするとテキストが書き込めない

こんにちは、javascript初心者です。 HTMLのtextarea内のテキストを変えたいのですが、HTMLにJSを埋め込むと動作するのですが、外部JSファイル読み込みだとなぜか何も表示されません。 なぜでしょうか。原因のわかる方、説明をどうかよろしくお願い致します。 ●HTML <head> <script src="test.js" type="text/javascript"></script> </head> <body> <form name="form1"> <textarea name="message" id="msg" rows="5" cols ="50"></textarea> </form> </body> ●JS window.onload = message(); function message(){ alert("hello");              //←これはちゃんと動作します。 document.getElementById("msg").value="hello"; //← 動作せず。 document.form1.message.value="hello"; //← これも上と同じく片方ずつ試しましたが、ダメでした。 }

みんなの回答

回答No.2

一番簡単な方法: ↓これをbody閉じタグの上に移動して <script src="test.js" type="text/javascript"></script> ↓jsの中身を変更する function message(){ alert("hello");              //←これはちゃんと動作します。 document.getElementById("msg").value="hello"; //← 動作せず。 document.form1.message.value="hello"; //← これも上と同じく片方ずつ試しましたが、ダメでした。 } message(); //←実行するだけ で動くようになりますよ。 <head>で読み込む外部JSでwindow.onloadすると 大抵DOMの準備が終わる前に実行されるので、「#msgなんてtextareaは存在しない」というエラーが出ていると思います。 なのでbodyの中(一番最後)にファイルの読み込みと関数の実行を入れるか、 Loadの代わりにDOMContentLoadedを使ってdocument.readyStateをチェックするのがよく使われます。

  • luka3
  • ベストアンサー率72% (424/583)
回答No.1

≫window.onload = message(); window.onload = message; が正しいと思うのですが、HTMLに直接書くとうまくいくという理由がはっきりしませんね。 処理の順番により、外部の時はdocumentの準備ができていない、といったところでしょうか。 別な書き方としては、 window.onload = function(){message();} とか。

関連するQ&A