当它应该返回false时,Javascript函数似乎返回true

时间:2014-07-11 21:15:58

标签: javascript jquery html

我写了一个html表单,允许用户从下拉菜单中选择他们的生日。一旦用户提交表单,那么这些值将被存储到javascript函数中的变量中,该函数将首先检查用户是否从每个字段(月,日)中选择了一个值,然后验证生日是否为有效日期。如果一切正确,那么下一个表格就是加载。我的问题是,一旦函数验证已选择了一个月和一天,程序就会加载下一个表单而不检查年份。

这是java脚本函数:

function checkBday() {
  var day = document.forms["register"]["DateOfBirth_Day"].value;
  var month = document.forms["register"]["DateOfBirth_Month"].value;
  var year = document.forms["register"]["DateOfBirth_Year"].value;
  if(month == "- Month -") {
    alert("Select a month");
    return false;
  }
  if(day == "- Day -") {
    alert("Select a day");
    return false;
  }
  if(year == "- year -") {
    alert("Select a year");
    return false;
  }
  if((month == 2 && day > 28) || (month == 4 && day == 31) || (month == 6 && day == 31) || (month == 9 && day == 31) || (month == 11 && day == 31)) {
    alert("Invalid birthday");
    return false;
  }
}

这是函数调用:

if(checkBday() == false) {
    return false; }
else {
    alert("Registration was successful!");
    return true; }

- 日 - 月 - 和 - 年 - 是默认值,如果从下拉菜单中未选择任何内容。感谢你在这方面的帮助。

3 个答案:

答案 0 :(得分:1)

我会重构你的代码看起来像这样:

function checkBday() {
  var day = document.forms["register"]["DateOfBirth_Day"].value;
  var month = document.forms["register"]["DateOfBirth_Month"].value;
  var year = document.forms["register"]["DateOfBirth_Year"].value;

  var default_month = "- Month -";
  var default_day = "- Day -";
  var default_year = "- Year -"
  // Validate presence of all fields.
  if (month == default_month) {
    alert("Select a month");
    return false;
  } else if (day == default_day) {
    alert("Select a day");
    return false;
  } else if (year == default_year) {
    alert("Select a year");
    return false;
  }

  // Validate date.
  if((month == 2 && day > 28) || (month == 4 && day == 31) || (month == 6 && day == 31) || (month == 9 && day == 31) || (month == 11 && day == 31)) {
    alert("Invalid birthday");
    return false;
  } else {
    return true;
  }
}

另外,我相信您的代码中可能存在拼写错误。您将年份与“ - 年 - ”进行比较。年份未资本化的情况(“ - 年 - ”)。除了函数没有返回任何内容之外,这可能是问题。

答案 1 :(得分:1)

它将以未定义的形式返回,因为如果条件一直落在嵌套值中,则不会给出返回值。

带上你的"否则"声明并将其放在实际函数的结束括号之前,如下所示:

function checkBday() {
var day = document.forms["register"]["DateOfBirth_Day"].value;
var month = document.forms["register"]["DateOfBirth_Month"].value;
var year = document.forms["register"]["DateOfBirth_Year"].value;
if(month == "- Month -") {
    alert("Select a month");
    return false; }
    if(day == "- Day -") {
        alert("Select a day");
        return false; }
    if(year == "- year -") {
        alert("Select a year");
        return false; }
    if((month == 2 && day > 28) || (month == 4 && day == 31) || (month == 6 && day == 31) || (month == 9 && day == 31) || (month == 11 && day == 31)) {
                    alert("Invalid birthday");
                    return false;
                }
alert("Registration was successful!");
return true;            
        }

答案 2 :(得分:0)

创建一个名为registration_successful的新变量。 如果在运行checkBday后变量为true,请继续下一个表单。

  function checkBday() {
          var registration_succesfull = false;
          var day = document.forms["register"]["DateOfBirth_Day"].value;
          var month = document.forms["register"]["DateOfBirth_Month"].value;
          var year = document.forms["register"]["DateOfBirth_Year"].value;
      if(month == "- Month -") {
           alert("Select a month");
           registration_succesfull = false; }
      else if (day == "- Day -") {
        alert("Select a day");
        registration_succesfull = false; }
      else if (year == "- year -") {
        alert("Select a year");
        registration_succesfull = false; }
      else if((month == 2 && day > 28) || (month == 4 && day == 31) || (month == 6 && day == 31) || (month == 9 && day == 31) || (month == 11 && day == 31)) {
                    alert("Invalid birthday");
                    registration_succesfull = false;  }

       else {registration_succesfull = true; } 
  return registration_succesfull;
       }

注意:2月也可以有29天