Проверка неизвестного количества полей
Доброго времени суток! Выполняю проверку неизвестного количества полей. Проверяется только одно, первое поле,а остальные добавленные пользователем поля не проверяются((
var requiredFields = $('input[class="required"]'); var requiredFieldsSize = requiredFields.size(); var isRequiredFieldsSize = 0; var submit = $("#cartgivebookbtn"); requiredFields.focus(function(e) { $(this).removeClass('error'); submit.attr('disabled', false); }); submit.mousedown(function(){ requiredFields.each(function() { if($.trim(this.value) != '') isRequiredFieldsSize++; else $(this).addClass('error'); }); // requiredFields.each if(isRequiredFieldsSize < requiredFieldsSize) { alert('Заполнены не все обязательные поля!'); $(this).attr('disabled', true); return false; } }); <p><label for="books"><input style="width: 110px" type="text" name="books[]" class="required" id="if1" maxlength="8"/></label></p> |
Используй html5 атрибут required. Все будет работать без js.
Для старья типа IE8 - серверная валидация, которая нужна в любом случае. |
Можешь полифил поискать для required. Я обычно использую webshims - но это целый комбайн, не уверен что его стоит всюду втыкать.
|
danik.js,
Спасибо! Вообще не хотел на 5-ку уходить. Но тут реально очень кстати. 50 строк скрипта можно не писать, всего лишь из-за добавления одного параметра. Надеюсь сильно жестких изменений нет и проект не прийдёться переписывать под 5-ку. |
Цитата:
|
Цитата:
Чтобы вообще проверять поле должно иметь те самые критерии. required, maxlength, multiple, pattern. В паттерны пишутся соответственно реги. Теоретически html5-ная форма сама способна все проверить если все правильно заколотить ей. Но практически получается какая-то хрень. Мало того что с этими регами одуреешь (это ж только специальные люди знают такой язык), так еще браузеры по-разному реагируют и еще файлы. Регой можно проверить максимальный размер файла или максимальное их количество? А если все равно писать скрипт - то уже все равно приходится отключать автовалидацию, ибо она неуправляема из скриптов. Ну вот, я как-то рассказывал что перечисленные индикаторы можно юзать как параметры. Пишите в required=3 - значит скрипт скажет "меньше 3 нельзя". maxlength и так понятно - для текстов это длина текста, для файлов - килобайты, multiple=5 - не больше 5. ЗЫ И еще куча новых полей браузерами до сих пор не поддерживается. |
Цитата:
|
kostyanet, что-то вы из мухи слона сделали. Проблема решена. Всё равно, как сказал danik.js на сервере надо данные проверить, а в браузере - это чисто для удобства пользователя.
|
Это вы из мухи слона надули. Потому что хтмл идет из сервера, или из мозга Жанны Агузаровой? Если первое то значит сервер уже должен знать, ну скрипт тамошний, про все эти поля неизвестные заранее - иначе каким членом он их проверит в тех же условиях? Следовательно когда скрипт 1 делает хтмл, то скрипт 2 должен как-то разобраться что там наворотил скрипт 1. Но не парсить же хтмл - значит данные поступают нормализованные. Так вот, из этих нормализованных данных и делается нормальный хтмл со всеми этими атрибутами и ява-скрипту делать-то ничего не надо: взял поле, взял параметры, взял шаблон - посчитал - не равно - пометить красным. А вы думаете как вообще работает встроенная в HTML5 валидация? Из мозга Жанны Агузаровой что ли берет красную рамку?
|
<label>Адрес электронной почты</label> <input type="email" name="formfield[1]" placeholder="email@example.com" maxlength="50" pattern="^[^\s@]+@[^\s@]+\.[^\s@]+$" required="5"/> Все берется из атрибутов. В первую очередь метод валидации, например validator['validate_'+field.type].call(); validate_email:function() { // бла-бла-бла }, На сервере: Код:
$fields('email') Код:
$fields('image') Но, блин, с файлами облом. Кроме типов файлов (тупой accept же берет все подряд) надо еще проверять имя файла - а для второго паттерна места уже нет. |
Часовой пояс GMT +3, время: 06:58. |