2013-04-01 5 views
4

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

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

Я не могу найти ответ на этот вопрос в документации.

Спасибо.

+0

Ваша конкретная логика проверки легко может быть выражено в виде регулярных выражений –

ответ

7

Чтобы объявить правила внутри .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

Смежные вопросы