Я использую плагин jQuery validation , пытающийся добавить правила на основе атрибутов data-
. Я добавляю правила min / maxlength на основе data-minlength
или data-maxlength
. Вот пример HTML:
<form>
<input name="input1" data-maxlength="5" data-minlength="3" required>
<input name="input2" data-maxlength="5" required>
<input name="input3" data-minlength="3" required>
<button>Submit</button>
</form>
Я делаю это, чтобы добавить правила, и все работает нормально:
$('input[data-minlength]').each(function(){
if ($(this).data('minlength')) {
$(this).rules("add", {
minlength: $(this).data('minlength')
});
}
});
$('input[data-maxlength]').each(function(){
if ($(this).data('maxlength')) {
$(this).rules("add", {
maxlength: $(this).data('maxlength')
});
}
});
Но я хотел сократить его, поэтому я попробовал это, и оно не работает:
['minlength', 'maxlength'].forEach(function(item){
$('input[data-'+item+']').each(function(){
if ($(this).data(item)) {
// alert(item) shows the correct rule name
$(this).rules("add", {
// Next line fails, but hardcoding a rule name works
item: $(this).data(item)
});
}
});
});
Ошибка в том, что $.validator.methods[method]
не определено. Каким-то образом ему передается неправильное имя метода, хотя alert(item)
говорит мне, что имя правила правильное.
Кто-нибудь знает, почему или у меня есть альтернативное решение, которое я могу использовать для сокращения повторяющегося рабочего кода выше?
Демо: http://jsfiddle.net/kaVKe/1/