Używam wtyczki jQuery validation próbującej dodać reguły na podstawie atrybutów data-
. Dodaję reguły min/maxlength na podstawie data-minlength
lub data-maxlength
. Oto niektóre próbki HTML:Dodawanie reguł sprawdzania poprawności jQuery na podstawie atrybutów danych w pętli
<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>
Robię to, aby dodać reguły i to działa dobrze:
$('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')
});
}
});
Ale chciałem skrócić go, więc to próbowałem i nie działa:
['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)
});
}
});
});
Błąd jest taki, że $.validator.methods[method]
jest niezdefiniowany. W jakiś sposób otrzymuję błędną nazwę metody, mimo że alert(item)
mówi mi, że nazwa reguły jest poprawna.
Czy ktoś ma pojęcie, dlaczego lub alternatywne rozwiązanie mogę użyć, aby skrócić powtarzający się, działający kod powyżej?
Demo: http://jsfiddle.net/kaVKe/1/
+1 Bo to były tylko sekundy ...;) – Yoshi
Dzięki, wiedziałem, że to coś podstawowego. JavaScript nie jest moją mocną stroną, doceniam szybkie wyjaśnienie. –