[英]Can't retrieve values of options from select tag JavaScript
你有时会使用myForm
用大写在前其他时间myform
小写 ,你必须选择其中之一。
将您的recalcDateDiff()
函数替换为以下内容,它将起作用:
JS:
function recalcDateDiff()
{
var myForm = document.form1;
alert("myForm.firstDay.selectedIndex = " + myForm.firstDay.selectedIndex);
alert("myform.firstDay.options[myForm.firstDay.selectedIndex].value = " + myForm.firstDay.options[myForm.firstDay.selectedIndex].value);
var firstDay = myForm.firstDay.options[myForm.firstDay.selectedIndex].value;
alert("Did you make it here - after retrieving the value of firstDay?");
var secondDay = myForm.secondDay.options[myForm.secondDay.selectedIndex].value;
var firstMonth = myForm.firstMonth.options[myForm.firstMonth.selectedIndex].value;
var secondMonth = myForm.secondMonth.options[myForm.secondMonth.selectedIndex].value;
var firstYear = myForm.firstYear.options[myForm.firstYear.selectedIndex].value;
var secondYear = myForm.secondYear.options[myForm.secondYear.selectedIndex].value;
var firstDate = new Date(firstDay + " " + firstMonth + " " + firstYear);
var secondDate = new Date(secondDay + " " + secondMonth + " " + secondYear);
alert("secondDate.valueOf(): " + secondDate.valueOf() + "\nfirstDate.valueOf(): " + firstDate.valueOf());
var daysDiff = (secondDate.valueOf() - firstDate.valueOf());
daysDiff = Math.floor(Math.abs((((daysDiff/1000)/60)/60)/24));
myForm.txtDays.value=daysDiff;
}
只需将myform
替换为myForm
。 下次需要检查浏览器控制台时进行工作;)
最好在这里而不是在其他地方发布代码,以确保代码在问题中持续存在。
正如Zakaria所指出的,您对表单名称的大写字母有疑问。 但是,如果将引用传递给使用this调用侦听器的元素,则无论如何都不需要表单名称。
此外,您还使用了一种很差的方法来将表单中的值转换为Date对象。 请勿构造和解析字符串,尤其是不符合ECMA-262的字符串。 最好给选项提供合适的值(例如零索引月份数)并使用Date构造函数,例如
<select name="firstMonth" onchange="recalcDateDiff(this)">
<option value="0">Jan</option>
<option value="1">Feb</option>
<option value="2">Mar</option>
<option value="3">Apr</option>
<option value="4">May</option>
<option value="5">Jun</option>
<option value="6">Jul</option>
<option value="7">Aug</option>
<option value="8">Sep</option>
<option value="9">Oct</option>
<option value="10">Nov</option>
<option value="11">Dec</option>
</select>
默认情况下,您应该在每个选择中都选择一个选项。 浏览器通常会选择第一个,但可能不会。
计算日期差的函数可以很简单:
function recalcDateDiff(el) {
var f = el.form;
var d0 = new Date(f.firstYear.value, f.firstMonth.value, f.firstDay.value);
var d1 = new Date(f.secondYear.value, f.secondMonth.value, f.secondDay.value);
f.txtDays.value = Math.round((d1 - d0) / 8.64e7);
}
四舍五入可以解决夏令时边界的过渡(过渡到夏令时时当前代码不会执行此操作)。
如果您想验证输入的日期(例如2月30日),该日期需要额外的一行,但是您现有的功能无法执行此操作,因此我没有将其包括在内。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.