重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

こんにちは、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"; //← これも上と同じく片方ずつ試しましたが、ダメでした。
}

A 回答 (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をチェックするのがよく使われます。
    • good
    • 0

≫window.onload = message();



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

別な書き方としては、
window.onload = function(){message();}
とか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!