我一直在处理的功能有问题。此函数的目的是获取两组文本输入框中的日期,计算两者之间的差异,然后将该天数放入第三组输入框中。我的功能如下图所示。
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;
}
}
开头的变量引用的三个数组仅包含我希望访问的表单元素的名称。我已经使用警告框测试了 start、end 和 out 变量,如果代码中的 Show Difference 注释下没有该行,则循环运行良好。我也经历过并确保所有名称都匹配并且它们确实匹配。此外,我已经用每组名称手动运行页面八次(有八组框),它成功地在日期框中显示“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>