2014-07-11 188 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; 
     } 

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

相關問題