3

我从 DOB 代码中看到了许多年龄验证,但我似乎无法使用我的代码。

基本上,我的 TAFE 课程要求我创建一个表格,其中包含名字、姓氏、电子邮件地址、联系电话号码、出生日期和感兴趣的领域(这是一个包含儿童和成人书籍的下拉框)。

我需要验证出生日期的格式是否正确。我已经成功地做到了这一点,它相当于 30 天的月份和闰年。

下一部分需要“感兴趣的区域”下拉框在提交时验证此人的年龄是否超过 18 岁。但是。只有选择的感兴趣领域是成人书籍。

现在,我可以做一些简单的事情并使它成为 1996 年及以上的所有年龄都将被拒绝,但我宁愿创建一个从输入的 DOB 执行此操作的验证,因为我认为这是可以预期的。

DOB 以 DD/MM/YYYY 的形式输入。

这是我到目前为止所拥有的:

<script language="JavaScript" type="text/javascript">
function validateForm()
{
    *snipped firstname, surname, email validation*
    var dob = document.getElementById("dateofbirth").value;
    *snipped dob validation*
    var area = document.getElementById("areaofinterest").value;
    if (area == "")
    {
        alert("Please select an Area of Interest!");
        return false;
    }
    var now = new Date();
    var birthdate = dob.split("/");
    var born = new Date(dob[2], dob[0], dob[1] * 1 - 1);
    var age = Math.floor((now.getTime() - born.getTime()) / (365.25 * 24 * 60 * 60 * 1000));
    if (area == "adults" && age<18)
    {
        alert("You need to be 18 years of age and older for the Adults books!");
        return false;
    }
return true;
}
</script>

我只是 JavaScript 的初学者,所以这段代码可能有一些非常明显的错误。但基本上写的就是我想要达到的。

如果选择了成人书籍感兴趣领域,请查看出生日期是否超过 18 岁。

可以在下面看到我所拥有的 HTML:

<form method="post" name="form1" onsubmit="return validateForm()" action="">
    Fields marked with * are required to be filled out!
    <br />
    First Name*: 
    <input type="text" id="firstname" name="First Name" placeholder="e.g. John" />
    <br />
    Surname*:
    <input type="text" id="surname" name="Surname" placeholder="e.g. Smith" />
    <br />
    Email address*:
    <input type="text" id="emailaddress" name="Email Address" placeholder="e.g. john.smith@example.com" />
    <br />
    Contact phone number:
    <input type="text" id="phonenumber" name="Contact Phone Number" placeholder="e.g. 0410 224 567" />
    <br />
    Date of Birth*:
    <input type="text" id="dateofbirth" name="Date of Birth" placeholder="DD/MM/YYYY" />
    <br />
    Area of Interest*:
    <select id="areaofinterest" name="Area Of Interest" />
    <option value="">Select interest</option>
    <option value="children">Books for children</option>
    <option value="adults">Books for adults</option>
    </select>
    <br />
    <input type="submit" value="Submit" /><input type="reset" value="Reset" />
</form>

我很感激任何反馈。如果这已经得到回答,我很抱歉。我知道它有,但我似乎无法让它为我的目的工作。我可能犯了一个简单的格式错误或忘记了一些东西。这可能是非常明显的事情。

4

4 回答 4

5

演示:http: //jsfiddle.net/mkginfo/LXEHp/7/

使用这个 JavaScript。测试并运行良好。注意:请使用此代码检查您的所有代码。您会在过去的代码中发现一些错误。我建议使用“console.log”和 firebug 来检查值。

  function validateForm()
    {
        //*snipped firstname, surname, email validation*
        var dob = document.getElementById("dateofbirth").value;
       // *snipped dob validation*
        var area = document.getElementById("areaofinterest").value;
        if (area == "")
        {
            alert("Please select an Area of Interest!");
            return false;
        }

        var now = new Date();
        var birthdate = dob.split("/");
        var born = new Date(birthdate[2], birthdate[0]-1, birthdate[1]);
        age=get_age(born,now);
        if (area == "adults" && age<18)
        {
            alert("You need to be 18 years of age and older for the Adults books!");
            return false;
        }

    }

    function get_age(born, now) {
      var birthday = new Date(now.getFullYear(), born.getMonth(), born.getDate());
      if (now >= birthday) 
        return now.getFullYear() - born.getFullYear();
      else
        return now.getFullYear() - born.getFullYear() - 1;
    }
于 2013-05-31T07:10:53.600 回答
0

我只是在您的年龄发现了一个小错误,它返回为NaN

尝试如下替换born变量:

    var born = new Date(dob.toString());

注意:问题在于日期解析!希望这有帮助!如果没有,请告诉我。

于 2013-05-31T06:31:20.743 回答
0

与其减去每年的平均毫秒数,不如试着弄清楚这个人今年是否过生日(这取决于时区)。然后从当前年份中减去出生年份,如果该人今年没有生日,则减去 1 得到年龄。就像是:

function age(born, now) {
  var birthday = new Date(now.getFullYear(), born.getMonth(), born.getDate());
  if (now >= birthday) 
    return now.getFullYear() - born.getFullYear();
  else
    return now.getFullYear() - born.getFullYear() - 1;
}
于 2013-05-31T06:33:29.667 回答
0
U can calculate exact age validation by this code. 
<head runat="server">
    <title>Untitled Page</title>

    <script type="text/javascript">
        function AgeValidation(ageOfCustomer)
        {
            var date=saildates.split('/')[2];
            var d = new Date();
            var lipday=((d.getFullYear()-date)/4);
            var month = d.getMonth()+1;
            var day = d.getDate();
            var output = day + '/' + month + '/' + d.getFullYear();
            var age=((daydiff(parseDate(output), parseDate(saildates))-lipday)/365);
            if(age > 18.000 || age== 18.000)
            {
                return true;
            }
            else
            {
                alert('Your age should be 18 or greater than 18 yrs!!!');
            }
        }
        function parseDate(str)
        {
            var mdy = str.split('/')
            return new Date(mdy[2], mdy[1]-1, mdy[0]);
        }
        function daydiff(first, second) 
        {
            return (first-second)/(1000*60*60*24)
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server"     OnClientClick="AgeValidation(this.form.TextBox1.value);"
            Text="Button" onclick="Button1_Click" />
    </div>
    </form>
</body>
于 2013-12-10T07:10:38.450 回答