繁体   English   中英

无法从选择标签JavaScript中检索选项的值

[英]Can't retrieve values of options from select tag JavaScript

JSbin演示

我需要计算两个日期之间的天差。 selecedIndex似乎可以通过警报框很好地运行。 当我尝试从select标记中检索选项的值时,它不会返回任何内容。

你有时会使用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 下次需要检查浏览器控制台时进行工作;)

您的JsBin已更新

最好在这里而不是在其他地方发布代码,以确保代码在问题中持续存在。

正如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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM