最初に発生した重複の理由は、日付文字列がボタンの上にあるのではなく、その逆です (ボタンが日付文字列の上にある)。使用する場合でも、document.write() は <body> 内の出力が HTML として意味を持つ正確な場所に配置する必要があります。<head> に配置しても意味がありません。あなたのブラウザはこれに混乱し、やみくもにすぐに実行しようとしますが、レイアウトを更新しません (明らかにまだ初期化されていません)。それ。
これがOLD STYLEのように見えるかもしれません。これは、現在のベスト プラクティスのコーディング標準と一致しないため、 正確にエミュレートする必要はありません。しかし、「実際に」何が起こっているのかをよりよく理解できるかもしれません。これは、「innerHTML」を使用せずにフォームを初期化する方法を示していることに注意してください。また、フォーム フィールドにラベルを付ける方法も示しています。
ここでは「document.write」を使用しないことに同意します。非常に柔軟性がありません (ページがサーバーからフェッチされると常に実行されますが、ユーザーが [戻る] ボタンをクリックするとおそらく実行されず、Javascript プログラムで "フォームのリセット" などの他の目的に使用することはできません)。また、多くの場合、実際にパフォーマンスが低下します。
フォーム上のすべての入力フィールドを整列して「きれい」にすることと、フォーム全体の周りにボックスを描画することの両方が一般的です。そのようなことは簡単にできます。ただし、質問の領域に焦点を当てるために、この例ではそれらを示していません。
以前は、getElementById() をまったく使用せずに、フォームとフォーム内のフィールドに名前を付けて、ブラウザー固有の巨大な配列でそれらにアクセスすることで、これを行うことができました (そして一般的でした)。しかし、getElementById() を使用する方法は非常に単純で、すべてのブラウザーで機能するため、以前の方法については説明しません。
window.onload= の使用 (関数名の後に括弧内の引数リストが続かないことに注意してください) は、もはや正しい方法ではありません。私がこれを使用したのは、それが非常に短くシンプルであり、読者が本当に重要なことに集中できるようにするためです.
<html>
<head>
<title>Example of setting a Form Input field</title>
<script type="text/javascript">
function showDefaultDate() {
var dateInputField = document.getElementById("dateInputField");
dateInputField.value = provideToday();
}
function provideToday() {
var currentTime = new Date();
var month = currentTime.getMonth() + 1;
var day = currentTime.getDate();
var year = currentTime.getFullYear();
var dateString = month + "/" + day + "/" + year;
return dateString;
}
function initializeForm() {
showDefaultDate();
}
window.onload = initializeForm;
</script>
</head>
<body>
<form>
Today's Date:
<input type="text" size=" 25" id="dateInputField">
<input type="button" value="Miscellaneous Button">
<br>
Another Field:
<input type="text" size="30">
<br>
<br>
<input type="submit" value="Click Me When Done" style="margin-left: 20ex;">
</form>
</body>
</html>