Я пытаюсь проверить несколько полей ввода, сначала проверив, если он пуст, а затем, если это числовое ненулевое значение. Это HTML-код:
<section style="" id="variations_holder">
<div class="con_var">
<input type="text" class="pupc" name="variation[pupc][]">
<input type="text" class="pprice" name="variation[pprice][]">
<input type="text" class="pqty" name="variation[pqty][]">
<input type="text" class="pupc" name="variation[pupc][]">
<input type="text" class="pprice" name="variation[pprice][]">
<input type="text" class="pqty" name="variation[pqty][]">
</div>
</section>
Сейчас есть только два набора входных данных, но может быть три или более, например:
<section style="" id="variations_holder">
<div class="con_var">
<input type="text" class="pupc" name="variation[pupc][]">
<input type="text" class="pprice" name="variation[pprice][]">
<input type="text" class="pqty" name="variation[pqty][]">
<input type="text" class="pupc" name="variation[pupc][]">
<input type="text" class="pprice" name="variation[pprice][]">
<input type="text" class="pqty" name="variation[pqty][]">
<input type="text" class="pupc" name="variation[pupc][]">
<input type="text" class="pprice" name="variation[pprice][]">
<input type="text" class="pqty" name="variation[pqty][]">
</div>
</section>
Поскольку они генерируются динамически. Теперь это код jQuery, который я сделал для проверки того, что я сказал ранее:
$('#variations_holder input.pprice').each(function() {
pprice = $(this).val();
if (!$.trim(this.value).length) {
alert($(this).prev('label').text() + ' no se puede dejar vacío!!!');
$(this).focus();
is_valid = false;
return false;
}
if (pprice.match('^[1-9]\d*$') === false) {
pprice.addClass('error');
}
});
Но он не работает по следующим причинам:
Что не так?
return
вами, возвращается из обратного вызова, который вы передаете each
и, когда вы возвращаете false
, он прерывает цикл.match
никогда не возвращает false
. Используйте вместо этого тест.pprice
, который является строкой.Вы можете исправить это следующим образом:
var is_valid = true;
$('#variations_holder input.pprice').each(function() {
pprice = $.trim(this.value);
if (!pprice.length) {
alert($(this).prev('label').text() + ' no se puede dejar vacío!!!');
$(this).focus();
is_valid = false;
} else if (!/^[1-9]\d*$/.test(pprice)) {
$(this).addClass('error');
is_valid = false;
}
});