2013-09-23 52 views
6

Tôi có một mẫu trên trang web của tôi rằng nên xác nhận cho bất cứ ai là trên 18.ngày Validate cho bất cứ ai trên 18 với jQuery

var day = $("#dobDay").val(); 
var month = $("#dobMonth").val(); 
var year = $("#dobYear").val(); 
var age = 18; 
var mydate = new Date(); 
mydate.setFullYear(year, month-1, day); 

var currdate = new Date(); 
currdate.setFullYear(currdate.getFullYear() - age); 
var output = currdate - mydate 
if ((currdate - mydate) > 0){ 
    // you are not 18 
} 

Nhưng nó làm việc theo cách hoàn toàn ngược lại. Tôi muốn tuyên bố nếu có hành động khi người dùng trên 18 tuổi.

Cảm ơn bạn đã giúp đỡ của bạn trước

+1

Cũng giống như một sang một bên, chắc chắn rằng bạn làm điều này server-side quá vì nó là ridiculously dễ dàng để phá vỡ cờ tuổi JS. –

+2

@RoryMcCrossan vâng .. bằng cách nhập một ngày khác :) – Calvin

+0

Vâng, nhưng ý tôi là bằng cách tắt hoàn toàn JS. Nếu đây là một yêu cầu pháp lý bạn thực sự không muốn nó dễ dàng để vượt qua. Nếu ai đó vào một ngày khác với ngày sinh nhật của họ thì đó là vấn đề của họ, chứ không phải OP. –

Trả lời

7

việc kiểm tra này DEMO

var day = 12; 
    var month = 12; 
    var year = 1996; 
    var age = 18; 
    var mydate = new Date(); 
    mydate.setFullYear(year, month-1, day); 

    var currdate = new Date(); 
    var setDate = new Date();   
    setDate.setFullYear(mydate.getFullYear() + age,month-1, day); 

     if ((currdate - setDate) > 0){ 
    // you are above 18 
     alert("above 18"); 
    }else{ 
    alert("below 18"); 
    } 
0

nếu nó làm việc theo cách ngược lại bạn đã thử trao đổi các > cho một < ngày thứ hai đến dòng cuối cùng?

+0

Tôi có, sau đó nó xác nhận mọi thứ. – Dom

3
var day = $("#dobDay").val(); 
var month = $("#dobMonth").val(); 
var year = $("#dobYear").val(); 
var age = 18; 

var mydate = new Date(); 
mydate.setFullYear(year, month-1, day); 

var currdate = new Date(); 
currdate.setFullYear(currdate.getFullYear() - age); 

if(currdate < mydate) 
{ 
    alert('You must be at least 18 years of age.'); 
} 
0

Tôi nghĩ rằng nó sẽ được dễ dàng hơn để hiểu nếu chúng ta đổi tên các biến

mydate => givenDate
currdate => thresholdDate

nếu givenDate > thresholdDate => bạn không phải là 18
else => bạn là 18

ví dụ:

if (givenDate > thresholdDate){ 
    // you are not 18 
} 

tức là

if ((givenDate - thresholdDate) > 0){ 
    // you are not 18 
} 

ví dụ:

if ((mydate - currdate) > 0){ 
    // you are not 18 
} 
2

Đây là một phiên bản hơi nhẹ mà tôi tested:

var day = 1; 
var month = 1; 
var year = 1999; 
var age = 18; 

var cutOffDate = new Date(year + age, month, day); 

if (cutOffDate > Date.now()) { 
    $('output').val("Get Outta Here!"); 
} else { 
    $('output').val("Works for me!"); 
} 

Điều quan trọng là thêm tuổi tối thiểu vào ngày sinh và xác nhận rằng ngày đó là trước ngày hiện tại. Bạn đang kiểm tra xem ngày hiện tại có trừ đi độ tuổi tối thiểu (về cơ bản ngày sinh mới nhất được cho phép) lớn hơn ngày sinh được cung cấp hay không, điều này sẽ cho bạn ngược lại.

1

Quy tắc xác thực 18 tuổi đối với plugin Trình xác thực jQuery sử dụng chức năng addMethod.

jQuery.validator.addMethod(
     "validDOB", 
     function(value, element) {    
      var from = value.split(" "); // DD MM YYYY 
      // var from = value.split("/"); // DD/MM/YYYY 

      var day = from[0]; 
      var month = from[1]; 
      var year = from[2]; 
      var age = 18; 

      var mydate = new Date(); 
      mydate.setFullYear(year, month-1, day); 

      var currdate = new Date(); 
      var setDate = new Date(); 

      setDate.setFullYear(mydate.getFullYear() + age, month-1, day); 

      if ((currdate - setDate) > 0){ 
       return true; 
      }else{ 
       return false; 
      } 
     }, 
     "Sorry, you must be 18 years of age to apply" 
    ); 

$('#myForm') 
     .validate({ 
      rules : { 
       myDOB : { 
        validDOB : true 
       } 
      } 
     }); 
+0

Làm việc cho bằng cách thay đổi bên dưới: var from = value.split ("-"); –