2011-05-03 132 views
1

在嘗試解決這個問題時遇到了一些麻煩,當談到JavaScript時完成新手。我試圖驗證一個表格,更具體的信用卡到期日。 例如,2011年1月將是​​無效的,但2011年12月將是有效的等等 這是我到目前爲止有:月份和年份的有效期限

function ExpiryDate() { 

var year 
var months 

today = new Date(); 
    expiry = new Date(year, month); 
    if (today.getTime() > expiry.getTime()) 

    return false; 
else 
    return true; 
}; 

我讀形式:

<form id="myform" method="post" action="default.html" onsubmit="return Validate(this);"> 

<p>Expiration Date: Month 

<select name="ExpMon" id="ExpMon" title="select a month"> 
     <option value="1">Jan</option> 
     <option value="2">Feb</option> 
     <option value="3">Mar</option> 
     <option value="4">Apr</option> 
     <option value="5">May</option> 
     <option value="6">June</option> 
     <option value="7">July</option> 
     <option value="8">Aug</option> 
     <option value="9">Sept</option> 
     <option value="10">Oct</option> 
     <option value="11">Nov</option> 
     <option value="12">Dec</option> 
</select>  

Year: 
<select name="ExpYear" id="ExpYear" title="select a year"> 
    <option value="2010">2010</option> 
    <option value="2011">2011</option> 
    <option value="2012">2012</option> 
    <option value="2013">2013</option> 
    <option value="2014">2014</option> 
    <option value="2015">2015</option> 
</select></p> 

</form 

我不知道如何使用ID來得到我想要的,任何幫助將不勝感激,在此先感謝。注意:我有一個名爲Validate的函數,它驗證了我的表單中的文本字段,所以我可以以某種方式將它附加到此。

回答

1
var year = document.getElementById("ExpYear").value; 
var month = document.getElementById("ExpMon").value; 

如果你願意,你可以使用的名稱來代替;您必須獲得驗證才能將表單元素作爲參數傳遞,但您可以使用theForm.ExpYear.valuetheForm.ExpMonth.value

注意:很多人不喜歡if (today.getTime() > expiry.getTime()) return false; else return true;形式的陳述,你可以簡單地寫​​。

+0

感謝您的及時響應。我發現你的建議非常有幫助。 – Hatzi 2011-05-04 15:23:00

1

Neil回答了您有關如何獲取值(+1)的問題。我只想補充一點,恕我直言,這將是一個更好的用戶體驗,而不是讓用戶首先選擇一個不可接受的失效日期。

這是一個更多的努力,但基本上,通過響應選定的月份,您可以查看當前時間,然後根據該月重置允許年份。同樣,根據所選年份,允許月份的設置將根據當前時間而變化。

與其讓用戶犯錯,然後發出警告,不要讓錯誤成爲可能。

1

下面將採取用戶輸入,創建一個日期對象,然後將它與今天的日期進行比較。一個關鍵的問題是它會找到當前月份的最後一天,因此即使今天是5月3日並且用戶選擇「2011年5月」(對信用卡交易有效),它也會返回「有效」。

function CheckDate() { 
    var selectedDate = new Date (document.getElementById("ExpYear").value,document.getElementById("ExpMon").value) 
    var nextmonth = selectedDate.setMonth(selectedDate.getMonth() + 1); 
    var last_date_of_selected_date = new Date(nextmonth -1); 
    var today = new Date(); 
    if (today > selectedDate) { 
     alert("Invalid"); 
    } 
    else { 
     alert("Valid"); 
    } 
} 

這裏有一個工作的jsfiddle看到這個動作:http://jsfiddle.net/cPApB/3/

+0

使用ISO8601日期格式比特定區域更好。此外,兩個月的日期應該設置爲相同的(比如第一個),今天的小時,分​​鍾和秒應該設置爲零。最簡單的方法是:'var today = new Date(); today = new Date(today.getFullYear(),today.getMonth());' – RobG 2011-05-04 00:44:08

+0

@RobG:ISO8601日期格式的好處。我相應地更新了我的答案。但是,它仍然會將當前日期與選定月份的最後一天進行比較,而不是像您所建議的那樣是第一天。 OP將該日期與有效的信用卡有效期限進行比較,有效期至本月底有效。 – 2011-05-04 13:26:43

+0

感謝您的幫助......這非常有用。 – Hatzi 2011-05-04 21:04:06

-2

使用這種簡單的驗證

var expiryYear = $('#<%# DataBinder.Eval (ddlYear,"ClientID") %> option:selected').val(); 
var expiryMonth = $('#<%# DataBinder.Eval (ddlValidMonths,"ClientID") %> option:selected').val(); 
      var currentUserDate = $('#<%# DataBinder.Eval (hdnFieldJsonDate,"ClientID") %>').val(); 
      if (currentUserDate != null && expiryMonth != null && expiryYear != null) { 
       currentUserDate = JSON.parse(currentUserDate); 
       if (expiryMonth > 0 && expiryYear > 0) { 

        //If the Expiry Year smaller than Current Year, then validation failed 
        if (expiryYear < currentUserDate.Year) 
        { args.IsValid = false; } 
        //If the Expiry Year larger than Current Year, then validation passed 
        else if (expiryYear > currentUserDate.Year) 
        { args.IsValid = true; } 
        //If the Expiry Year is same as Current Year, and if Expiry Month is smaller than current month, then validation failes, else passed. 
        else if (expiryYear == currentUserDate.Year) { 
         if (expiryMonth < currentUserDate.Month) 
          args.IsValid = false; 
         else 
          args.IsValid = true; 
        } 
       } 
       else 
       { args.IsValid = true; } 
      } 
0

試試這個:

var today = new Date(); 
var expDate = new Date($("#cart-expyear").val(),($("#cart-expmonth").val()-1)); // JS Date Month is 0-11 not 1-12 replace parameters with year and month 
if(today.getTime() > expDate.getTime()) { 
    console.log("Your Card is expired. Please check expiry date."); 
}