2013-08-26 2 views
0

Я пытаюсь проверить поле ввода, который содержит дату пользователя рождения, и мне нужно сделать две проверки - 1. Убедитесь, что пользователь 18 лет и 2. Убедитесь, что его/ее возраст не превышает 100.Использование JQuery проверки правило дважды для поля

Мой метод пользовательских валидации -

$.validator.addMethod(
     "datediff", 
     function(value, element, diff_years) { 
      var curr_date = new Date().getFullYear(); 
      var element_date = Date.parse($(element).val()).getFullYear(); 
      return element_date >= curr_date - diff_years; 
     } 
); 

а вот как я добавить правило.

var validator = $('form').validate({ 
    rules: { 
     'dob': {datediff: 18} 
    }, 
    messages: { 
     dob: {datediff: 'You have to be 18 or more!'} 
    } 
}); 

Как повторно использовать datediff правило в два раза, так что я могу сделать, как чеки? Я попытался просто добавить еще одно правило datediff, но это не сработало.

Edit: Я также должен показать 2 различных сообщений - например - 1. «Вы должны быть 18 или более» для первого условия, и «Вы не можете быть более чем 100» для второй.

ответ

1

Если вам нужны два уникальных сообщения, то вам нужно два уникальные правила/методы. Вы можете поместить свой общий код в одну функцию и вызвать его из пользовательского метода.

Что-то вроде этого ...

function datediff(value, diff_years) { 
    var curr_date = new Date().getFullYear(); 
    var element_date = Date.parse(value.getFullYear(); 
    return element_date >= curr_date - diff_years; 
} 

$.validator.addMethod("over18", function(value, element) { 
    // your custom function below 
    // var result = datediff(value, 18); 
    // return true if age is greater than 18 
    // return false and error message will display 
}, "You must be over 18"); 

$.validator.addMethod("under100", function(value, element) { 
    // your custom function below 
    // var result = datediff(value, 100); 
    // return true if age is less than 100 
    // return false and error message will display 
}, "You must be under 100"); 

$('form').validate({ 
    rules: { 
     dob: { 
      over18: true, 
      under100: true 
     } 
    } 
}); 
+0

Ну, это ближе всего к моим намерениям. Благодаря! – GPX

0

Попробуйте использовать правило Range:

rules: { 
field: { 
    required: true, 
    range: [18, 100] 
    } 
} 

Источник: http://jqueryvalidation.org/range-method

+0

Ах это выглядит интересно. Смогу ли я показать разные «сообщения» для обоих полей? – GPX

+0

Я не думаю, что это было бы возможно, поскольку вы можете установить только одно сообщение для проверки. Я попытаюсь придумать решение с двумя сообщениями – Yeronimo

1

Если вы хотите обрабатывать 2 разные сообщения, то, возможно, вы можете использовать max и min

max: Делает элемент требует заданного максимума.
min: Заставляет элемент требовать заданный минимум.

Правила:

rules: { 
     dob: { 
      min: 18, 
      max: 100, 
      required: true 
     } 
    } 

Сообщения отображаются:

messages: { 
     dob: { 
      required: "Please enter the age", 
      min: "Enter the age above 18", 
      max: "Age should be below 100" 
     } 
    } 

Проверьте в JSFiddle

+1

Как использовать переменные 'min' и' max' в моем обычном методе 'датфик'? – GPX