Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.09.2014, 19:31
Аспирант
Отправить личное сообщение для Lobezki Посмотреть профиль Найти все сообщения от Lobezki
 
Регистрация: 09.09.2014
Сообщений: 48

Проверка неизвестного количества полей
Доброго времени суток! Выполняю проверку неизвестного количества полей. Проверяется только одно, первое поле,а остальные добавленные пользователем поля не проверяются((

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>
Ответить с цитированием
  #2 (permalink)  
Старый 30.09.2014, 21:00
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Используй html5 атрибут required. Все будет работать без js.
Для старья типа IE8 - серверная валидация, которая нужна в любом случае.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 30.09.2014, 21:02
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Можешь полифил поискать для required. Я обычно использую webshims - но это целый комбайн, не уверен что его стоит всюду втыкать.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 30.09.2014, 22:15
Аспирант
Отправить личное сообщение для Lobezki Посмотреть профиль Найти все сообщения от Lobezki
 
Регистрация: 09.09.2014
Сообщений: 48

danik.js,
Спасибо! Вообще не хотел на 5-ку уходить. Но тут реально очень кстати. 50 строк скрипта можно не писать, всего лишь из-за добавления одного параметра. Надеюсь сильно жестких изменений нет и проект не прийдёться переписывать под 5-ку.
Ответить с цитированием
  #5 (permalink)  
Старый 30.09.2014, 22:19
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Lobezki
Надеюсь сильно жестких изменений нет и проект не прийдёться переписывать под 5-ку
Что это значит?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 01.10.2014, 00:26
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от Lobezki
Выполняю проверку неизвестного количества полей
Это называется выполняю абстрактную проверку. Когда валидатор проверяет вообще, по доступным критериям, а не конкретно нарисованную для него форму.

Чтобы вообще проверять поле должно иметь те самые критерии. required, maxlength, multiple, pattern. В паттерны пишутся соответственно реги. Теоретически html5-ная форма сама способна все проверить если все правильно заколотить ей.

Но практически получается какая-то хрень. Мало того что с этими регами одуреешь (это ж только специальные люди знают такой язык), так еще браузеры по-разному реагируют и еще файлы.

Регой можно проверить максимальный размер файла или максимальное их количество? А если все равно писать скрипт - то уже все равно приходится отключать автовалидацию, ибо она неуправляема из скриптов.

Ну вот, я как-то рассказывал что перечисленные индикаторы можно юзать как параметры. Пишите в required=3 - значит скрипт скажет "меньше 3 нельзя". maxlength и так понятно - для текстов это длина текста, для файлов - килобайты, multiple=5 - не больше 5.

ЗЫ И еще куча новых полей браузерами до сих пор не поддерживается.
Ответить с цитированием
  #7 (permalink)  
Старый 01.10.2014, 00:29
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Цитата:
$(this).attr('disabled', true);
В ФФ если единственная кнопка задисаблена, форму нельзя отправить вообще, даже скриптом. Кросафчеги.
Ответить с цитированием
  #8 (permalink)  
Старый 03.10.2014, 14:10
Аспирант
Отправить личное сообщение для Lobezki Посмотреть профиль Найти все сообщения от Lobezki
 
Регистрация: 09.09.2014
Сообщений: 48

kostyanet, что-то вы из мухи слона сделали. Проблема решена. Всё равно, как сказал danik.js на сервере надо данные проверить, а в браузере - это чисто для удобства пользователя.
Ответить с цитированием
  #9 (permalink)  
Старый 04.10.2014, 17:46
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Это вы из мухи слона надули. Потому что хтмл идет из сервера, или из мозга Жанны Агузаровой? Если первое то значит сервер уже должен знать, ну скрипт тамошний, про все эти поля неизвестные заранее - иначе каким членом он их проверит в тех же условиях? Следовательно когда скрипт 1 делает хтмл, то скрипт 2 должен как-то разобраться что там наворотил скрипт 1. Но не парсить же хтмл - значит данные поступают нормализованные. Так вот, из этих нормализованных данных и делается нормальный хтмл со всеми этими атрибутами и ява-скрипту делать-то ничего не надо: взял поле, взял параметры, взял шаблон - посчитал - не равно - пометить красным. А вы думаете как вообще работает встроенная в HTML5 валидация? Из мозга Жанны Агузаровой что ли берет красную рамку?
Ответить с цитированием
  #10 (permalink)  
Старый 04.10.2014, 17:49
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

<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')
	->type('email')
	->label('Адрес электронной почты')
	->placeholder('email@example.com')
	->maxlength(50)
	->pattern()
	->required(5);
Совпадение имени поля с типом значения не имеет, просто в бд оно так и называется имейл. Проперть pattern пустая, потому что рега имейла относится к вечным и смысла ее каждый раз прописывать нет. В классе есть метод который достает из массива регу по ключу имейл и втыкает в проперь по признаку имени проперти - pattern. Но если нужен особый для конкретного случая -

Код:
$fields('image')
	->type('file')
	->label('Загрузка файла')
	->maxlength(200)
	->multiple(3)
	->sub_label(' (максимум: '.$fields->image->multiple
        .' по '.$fields->image->maxlength.'Кб, '.($types='jpg,jpeg,png,gif').')')
	->pattern($types)
	->accept('image/*');
и рендер его впихнет в атрибут автоматически. Таким образом достигается цель - хранить факт в одном месте.

Но, блин, с файлами облом. Кроме типов файлов (тупой accept же берет все подряд) надо еще проверять имя файла - а для второго паттерна места уже нет.

Последний раз редактировалось kostyanet, 04.10.2014 в 18:00.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка полей js. MorroWIndss Элементы интерфейса 1 16.05.2014 08:38
Проверка полей при потере фокуса Paltusssss Общие вопросы Javascript 2 13.08.2013 19:32
Проверка полей на форме alex_89 Общие вопросы Javascript 2 13.05.2011 14:12
Проверка полей отправляемой формы. denisOgr jQuery 6 18.10.2010 19:40
проверка полей формы!!!! DENAT Общие вопросы Javascript 0 05.06.2008 22:14