JQuery Validate с пользовательскими селекторами и логикой

Можно ли использовать JQuery Validate с пользовательскими селекторами и логикой проверки? Что-то в духе следующего:

$('#myForm').validate({
    rules: {
        '[myattr="foo"]': function(content) { return $(content).val().contains('bar'); }  
    }
})

Кажется, я не могу найти ответ на этот вопрос в документации.

Спасибо.


person MgSam    schedule 01.04.2013    source источник
comment
Ваша конкретная логика проверки может быть легко выражена в виде регулярного выражения   -  person John Dvorak    schedule 01.04.2013


Ответы (1)


Чтобы объявить правила внутри .validate(), вы должны использовать атрибут name. Обходной путь — использовать метод rules('add'), который позволит вам использовать любой селектор jQuery. (Однако, несмотря на выбранный метод назначения правил, каждое поле должно по-прежнему содержать уникальный атрибут name.)

$('[myattr="foo"]').rules('add', {
    required: true,
    messages: {
        required: "optional custom message"
    }
});

См.: http://docs.jquery.com/Plugins/Validation/rules#.22add.22rules

Примечания:

  • Убедитесь, что вы используете последнюю версию плагина, в которой совсем недавно была исправлена ​​ошибка, из-за которой использование messages внутри rules('add') нарушало правило.

  • Если ваш селектор похож на class, где вы хотите выбрать более одного элемента, вы должны обернуть rules('add') внутри jQuery .each().

$('.myclass').each(function() {
    $(this).rules('add', {
        required: true,
        messages: {
            required: "optional custom message"
        }
    });
});

Чтобы использовать пользовательскую функцию как правило, вы просто создаете свой метод/правило, используя метод addMethod, а затем объявляете его как любое другое правило.

 $.validator.addMethod('myrule', function(value, element, params) {
     // your function
     // return true to pass
     // return false to fail
 }, "error message");

 $('#myform').validate({
     rules: {
         myfield: {
             required: true,
             myrule: true
         }
     }
 });

См.: http://docs.jquery.com/Plugins/Validation/Validator/addMethod#namemethodmessage

person Sparky    schedule 01.04.2013