私が取り組んできた機能に問題があります。この関数の目的は、2 セットのテキスト入力ボックス内にある日付を取得し、2 つの差を計算してから、その日数を 3 番目のボックス セットに配置することです。私の機能を以下に示します。
function daysBetween() {
for (var i = 0; i < 8; i++) {
//Get the value of the current form elements
var start = namestart[i];
var end = namend[i];
var out = names[i];
//Duration of a day
var d = 1000*60*60*24;
// Split Date one
var x = start.split("-");
// Split Date two
var y = end.split("-");
/// // Set Date one object
var d1 = new Date(x[0],(x[1]-1),x[2]);
// // Set Date two object
var d2 = new Date(y[0],(y[1]-1),y[2]);
//
// //Calculate difference
diff = Math.ceil((d2.getTime()-d1.getTime())/(d));
//Show difference
document.getElementById(out).value = diff;
}
}
最初に変数によって参照される 3 つの配列には、アクセスしたいフォーム要素の名前だけが含まれています。アラート ボックスを使用して start、end、out 変数をテストしましたが、コードの Show Difference コメントの下に行がない場合、ループは正常に実行されます。私も調べて、すべての名前が一致していることを確認しました。また、手動でページを 8 回実行し (8 セットのボックスがあります)、それぞれの名前のセットを使用すると、日ボックスに「NaN」が正常に表示されます (現時点ではソース ボックスにデータがないため、NaN が予想されます)。行動)。
ここに示すように関数を実行すると、テキスト ボックスの最初のセットが意図したとおりに機能します。その後、ループが停止します。したがって、私の質問は非常に単純です。names[0] 値が機能しているにもかかわらず、ループが getElementById でハングアップするのはなぜですか。テキスト ボックスが見つかり、計算された差がボックスに表示されます。names[1] のテキスト ボックスが機能せず、ループがハングアップします。
私のテキスト ボックスのより詳細なコードが必要な場合は、提供できますが、以下の簡単なテンプレートに従います。
// namestart[] array
<input type="text" name="start_date_one" id="start_date_one" value=""/> <br />
// namend[] array
<input type="text" name="end_date_one" id="end_date_one" value=""/> <br />
// names[] array
<input type="text" name="day_difference_one" id="day_difference_one" value=""/>
事前に助けてくれてありがとう。
編集:参照用に配列定義を追加すると思ったコメントに気づきました。これらは、私の calcdate.js ファイルの関数のすぐ上で定義されています。
var namestart = new Array ();
namestart[0] = "trav_emer_single_date_go";
namestart[1] = "trav_emer_extend_date_go";
namestart[2] = "allinc_single_date_go";
namestart[3] = "allinc_annual_date_go";
namestart[4] = "cancel_date_go";
namestart[5] = "visitor_supervisa_date_go";
namestart[6] = "visitor_student_date_go";
namestart[7] = "visitor_xpat_date_go";
var namend = new Array ();
namend[0] = "trav_emer_single_date_ba";
namend[1] = "trav_emer_extend_date_ba";
namend[2] = "allinc_single_date_ba";
namend[3] = "allinc_annual_date_ba";
namend[4] = "cancel_date_ba";
namend[5] = "visitor_supervisa_date_ba";
namend[6] = "visitor_student_date_ba";
namend[7] = "visitor_xpat_date_ba";
var names = new Array ();
names[0] = "trav_emer_single_days";
names[1] = "trav_emer_extend_days";
names[2] = "allinc_single_days";
names[3] = "allinc_annual_days";
names[4] = "cancel_days";
names[5] = "visitor_supervisa_days";
names[6] = "visitor_student_days";
names[7] = "visitor_xpat_days";
ファイルを参照し、ヘッダーで関数を次のように呼び出します。
<script type="text/javascript" src="calcdate.js"></script>
<script type="text/javascript">
window.onload = daysBetween;
</script>