2011-05-03 164 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."); 
}