Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как перебрать все элементы в цикле, для каждого из них?

Константин Ефименко Гуру (3721), закрыт 4 года назад
Здесь я перебираю все входы в input с классом .t-inp:

$('.btn').on('click', function() {
var inp = $('.t-inp');
for(var i = 0; i < inp.length; i++) {
var date = inp.eq(i).val().trim(),
$dv1inp = $('.dv1-inp'),
$dv2inp = $('.dv2-inp'),
DatExp = new RegExp(/^(0[1-9]|[12][0-9]|3[01])[\.](0[1-9]|1[012])[\.](19[7-9]\d|[2-9]\d\d\d)$/);
if ((date.length == 0) || (!date.match(DatExp))) {
if (date.length == 0) {
$dv1inp.show();
setTimeout(function(){$dv1inp.fadeOut('slow');}, 2000);
}
if ((date.length >= 1) && (!date.match(DatExp))) {
$dv2inp.show();
setTimeout(function(){$dv2inp.fadeOut('slow');}, 2000);
}
} else {
if ((date.length >= 1) && (date.match(DatExp))) {
//Происходит цикл событий
//Появляется вторая кнопка
}
}
}
});

Переменные $dv1inp и $dv2inp это div(ы), где в первом случае - "Заполните поля", а во втором случае - "Не соответствует формату даты".

Данное событие, проверяет регулярное выражение для каждого входа, но лишь 1 раз, для одного из них.

Есть ли, какой-то хороший способ, проверять его для всех полей? Опишите как вам это удалось.
Лучший ответ
Андрей Высший разум (425628) 4 года назад
$('.t-inp').each(function(idx, obj) {
var val = $(obj).val().trim();
if (val.length === 0) {
// Обрабатываем ситуацию "поле пусто"
} else if (!/^([0-2]\d|3[01])\.(0\d|1[0-2])\.(19|20)\d{2}$/.test(val)) {
// Обрабатываем ситуацию "ошибочный формат данных"
} else {
// Обрабатываем ситуацию "всё введено правильно"
}
});
Константин ЕфименкоГуру (3721) 4 года назад
Вы не поверите, но работает точно так же, как было до этого (как с вашей, так и с моей регуляркой). Достаточно ввести в одно из полей дату в допустимом диапазоне и сразу же обрабатывается ситуация "всё введено правильно".

Возможно это связанно с тем, что все input(ы) находятся в табличной части (по одному на одну строку), либо я что-то упускаю.
Андрей Высший разум (425628) ИМХО, ошибочен сам подход. Должно быть две проверки. Одна срабатывает на change или blur каждого поля ввода, проверяет ТОЛЬКО это поле и при ошибке выдает всплывающее сообщение. А вторая проверка должна срабатывать на click кнопки, проверять ВСЕ поля и выдавать сообщение: "Правильно заполните все поля". Вторая проверка выглядит как-то так: $('.btn').on('click', function() { var is_error = false; $('.t-inp').each(function(idx, obj) { var val = $(obj).val().trim(); is_error |= val.length === 0 || !/^([0-2]\d|3[01])\.(0\d|1[0-2])\.(19|20)\d{2}$/.test(val); }); if (is_error) { // Ошибочные данные } else { // Всё введено правильно } });
Остальные ответы
Петр Балуев Ученик (171) 4 года назад
нужно что-бы для разных полей проверялись разные регулярки?
Константин ЕфименкоГуру (3721) 4 года назад
Нет, только эта.
Петр Балуев Ученик (171) а $dv1inp и $dv2inp у каждого input свой?
Похожие вопросы