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

Как проверить длину символов, в динамически создаваемых input(ах)?

Константин Ефименко Гуру (3721), закрыт 4 года назад
У меня есть таблица, которая выглядит следующим образом:
<table class="tbl">
<tr id="'+ID+'" data-trnum="'+Num+'">
<th class="th-c tnr fw">'+FIO+'</th>
<th class="th-c tnr fw">'+SP+'</th>
<th class="th-c tnr fw"> </th>
<th class="th-c tnr fw">'+NF+'</th>
<th class="th-c tnr fw">'+GP+'</th>
<th class="tnr th fw"><input class="t-inp pl" /></th>
</tr>
</table>

Где, атрибут id - тега tr является уникальным и никогда не повторяется. В каждом tr содержится по одному input(у) с классом t-inp. Сами tr, динамически добавляются в таблицу при помощи append().

Необходимо узнать кол-во символов во всех input(ах), составив из этого условие, которое должно выглядеть следующим образом:
var test = $('.t-inp').val().trim(),
DatExp = new RegExp(/^(0?[1-9]|[12][0-9]|3[01])[\/\.](0?[1-9]|1[012])[\/\.]\d{4}$/);
if ((test.length == 0) || (!test.match(DatExp))) {
if (test.length == 0) {
alert('Заполните поля');
}
if ((test.length >= 1) && (!test.match(DatExp))) {
alert('Не соответствует формату даты');
}
} else {//Происходит цикл событий}

Проблема заключается в том, что в таком виде, проверка происходит лишь по первому полю ввода input, а проверять нужно по всем.

Возможно ли осуществить нечто подобное, а главное как? Рабочий пример приветствуется.
Лучший ответ
Elepsis Eclipse Гений (64071) 4 года назад
Первые три строки... остальное не трогал (ну и +1 скобка в конце):
_________________________________

var inp = $('.t-inp');
for( var i = 0; i < inp.length; i++ ){

var test = inp.eq(i).val().trim(),
DatExp = new RegExp(/^(0?[1-9]|[12][0-9]|3[01])[\/\.](0?[1-9]|1[012])[\/\.]\d{4}$/);
if ((test.length == 0) || (!test.match(DatExp))) {
if (test.length == 0) {
alert('Заполните поля');
}
if ((test.length >= 1) && (!test.match(DatExp))) {
alert('Не соответствует формату даты');
}
} else {//Происходит цикл событий}
}

_______________________________________

или...

$('.t-inp').each(function(){

var test = $(this).val().trim(),
DatExp = new RegExp(/^(0?[1-9]|[12][0-9]|3[01])[\/\.](0?[1-9]|1[012])[\/\.]\d{4}$/);
if ((test.length == 0) || (!test.match(DatExp))) {
if (test.length == 0) {
alert('Заполните поля');
}
if ((test.length >= 1) && (!test.match(DatExp))) {
alert('Не соответствует формату даты');
}
} else {//Происходит цикл событий}

});
Константин ЕфименкоГуру (3721) 4 года назад
Пока сделал так:

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))) {
//Происходит цикл событий
//Появляется кнопка
}
}
}

Я заменил alert() на 2 div(а) с текстом.
Константин ЕфименкоГуру (3721) 4 года назад
Проблема заключается в том, что проверка идёт только по вводу в input(ы). Но стоит ввести полную дату в первое поле, а в остальные по 1 символу. Дальше срабатывает else...,а регулярка игнорируется.
Константин ЕфименкоГуру (3721) 4 года назад
Даже больше, достаточно ввести дату в любое поле и на этом проверка вся заканчивается.
Остальные ответы
Senior Backend Developer Оракул (77675) 4 года назад
Просто обходи их в цикле по одному
api.jquery.com/each/
Константин ЕфименкоГуру (3721) 4 года назад
Как раз в этом и дело,.. ума не приложу как здесь цикл прикрутить.
Похожие вопросы