2014-07-11 146 views
-1

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

这里是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; } 

- Day- - 月 - 和 - 如果不从所选年 - 为默认值下拉式菜单。感谢您的帮助,我在这方面做了一个小菜一碟。

+2

你有你的JS任何错误?看看控制台。还包括这些选择元素的标记。我要求加价的原因是因为你年的“y”是小写,而其余的是大写。你甚至在最后写上大写字母。 –

+2

奇数码。 checkBday永远不会返回true。只有在未触发“if”的情况下才会定义。你也需要提供你的HTML。 –

+0

if(!month){ alert(“Select a month”); 返回false; } – user1572796

回答

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

它回到未定义状态,因为如果条件一直通过嵌套值,则不会返回值。

把你的“别人”的声明,并把它放在右括号前的实际功能,如:

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;    
     } 
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; 
     } 

注:二月能有二十九天,以及

相关问题