Javascript.RU

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

Грамотная валидация формы
Люди, помогите, пожалуйста Никак не могу реализовать нормальную валидацию формы. Есть 4 поля: "Имя", "E-mail", "Тема", "Сообщение". Как реализовать проверку на их заполнение, чтобы выводилось сообщение о том, какие(-ое) поля(-е) не заполнены(-о) вообще, а какие(-ое) - не соответствуют(-ет) регулярным(-ому) выражениям(-ю)?

Регулярные выражения для полей имеются:

1: /^[А-Яа-яЁё]+$/ - "Имя" - одно слово на русском в любом регистре
2: <input type="email"> - "E-mail" - подскажите, пожалуйста, если есть что-то лучше
3, 4: /^[А-Яа-яЁё\W\s\d]+$/ - "Тема", "Сообщение" - все, что угодно, но только на русском
Ответить с цитированием
  #2 (permalink)  
Старый 01.08.2013, 05:02
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

seniormelikyan, обычно такое проверяют на стороне сервера.
Ответить с цитированием
  #3 (permalink)  
Старый 01.08.2013, 08:46
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от seniormelikyan
Никак не могу реализовать нормальную валидацию формы.
В чем именно проблема?
Ответить с цитированием
  #4 (permalink)  
Старый 01.08.2013, 11:05
Интересующийся
Отправить личное сообщение для seniormelikyan Посмотреть профиль Найти все сообщения от seniormelikyan
 
Регистрация: 01.08.2013
Сообщений: 21

Проблема - в том, что не получается реализовать проверку каждого условия, а не какого-то конкретного в отдельности. Мне нужно, чтобы форма не отправлялась, пока не будут соблюдены все условия. Вот мой код: Сейчас, если все поля пусты, при нажатии на кнопку "Отправить", в поле ошибки выводится "Введите свое имя на русском языке...", хотя я ожидаю "Заполните все поля". Я запутался в своих же условиях. В общем, никак я этой форме ума не дам.

window.onload = function() {

form = document.forms[0],
fields = form.getElementsByTagName('input'),
msg = form.getElementById('required'),
regExp = /^[А-Яа-яЁё\W\s\d]+$/;

form.onsubmit = function(event) {

for (var i = 0; i < fields.length; i++) {

if (!fields[i].value) {
event.preventDefault();
fields[i].className = 'invalid';
msg.innerHTML = 'Заполните обязательные поля';
}

else
fields[i].className = "";

if (fields[0].value.search(/^[А-Яа-яЁё]+$/)) {
event.preventDefault();
msg.innerHTML = fields[0].title;
fields[0].className = 'invalid';
}

else if (fields[2].value.search(regExp)) {
event.preventDefault();
msg.innerHTML = fields[2].title;
fields[2].className = 'invalid';
}

else if (fields[3].value.search(regExp)) {
event.preventDefault();
msg.innerHTML = fields[3].title;
fields[3].className = 'invalid';
}

}
}
}

Последний раз редактировалось seniormelikyan, 01.08.2013 в 11:14.
Ответить с цитированием
  #5 (permalink)  
Старый 01.08.2013, 11:07
Интересующийся
Отправить личное сообщение для seniormelikyan Посмотреть профиль Найти все сообщения от seniormelikyan
 
Регистрация: 01.08.2013
Сообщений: 21

А если сделать проверку, включен ли Javascript, и, если нет, вывести сообщение об ошибке с ссылкой на Google Help по включению Javascript и не пустить пользователя никуда, пока он его не включит? Можно, конечно, и на стороне сервера повозиться, но мне кажется, что такой вариант тоже вполне себе приемлем. Я прав?
Ответить с цитированием
  #6 (permalink)  
Старый 01.08.2013, 11:08
Интересующийся
Отправить личное сообщение для seniormelikyan Посмотреть профиль Найти все сообщения от seniormelikyan
 
Регистрация: 01.08.2013
Сообщений: 21

Кто-нибудь может мне помочь?
Ответить с цитированием
  #7 (permalink)  
Старый 01.08.2013, 23:40
Аватар для zilker
Профессор
Отправить личное сообщение для zilker Посмотреть профиль Найти все сообщения от zilker
 
Регистрация: 30.07.2011
Сообщений: 189

<style>
	input[type="text"], input[type="email"] {
		width: 100px;
	}
	.invalid {
		background: red;
	}
</style>

<form id="test">
	<input type="text" title="имя"></input>
	<input type="email" title="email"></input>
	<input type="text" title="тема"></input>
	<input type="text" title="сообщение"></input>
	<span id="required"></span><br>
	<input type="submit" >
</form>

<script>
window.onload = function() {

	var	form = document.forms[0],
			fields = form.querySelectorAll('input[type="text"], input[type="email"]'),
			msg = document.getElementById('required'),
			regExp = [/^[А-Яа-яЁё]+$/, /.+@.+\..+/i, /^[А-Яа-яЁё\W\s\d]+$/, /^[А-Яа-яЁё\W\s\d]+$/];

	form.onsubmit = function(event) {
		var valid = true, cnt = 0;
		
		event.preventDefault();
		
		Array.prototype.forEach.call(fields, function(input) {
			input.classList.remove('invalid');
			if(!input.value.length) {
				cnt++;
			}
		})
		
		if(cnt == fields.length) {
			Array.prototype.forEach.call(fields, function(input) {
				input.classList.add('invalid');
			})
			msg.innerHTML = 'Заполните обязательные поля!';
			return;
		}		
		
		for (var i = 0, l = fields.length; i < l; i++) {
			fields[i].classList.remove('invalid');
			if(!fields[i].value.match(regExp[i])) {
					fields[i].classList.add('invalid');
					msg.innerHTML = 'Неверно введено поле ' + fields[i].title + '!';
					valid = false;
					break;
			}
		}
		
		if (valid) {
			form.submit();
		}
		
	}
}
</script>
Ответить с цитированием
  #8 (permalink)  
Старый 03.08.2013, 02:37
Интересующийся
Отправить личное сообщение для seniormelikyan Посмотреть профиль Найти все сообщения от seniormelikyan
 
Регистрация: 01.08.2013
Сообщений: 21

Большое спасибо
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Валидация формы Ваяс Элементы интерфейса 8 11.07.2012 15:20
Внешняя валидация формы grego Events/DOM/Window 1 19.03.2012 23:03
Валидация полей формы на JS и сервере alex_89 Events/DOM/Window 9 04.12.2011 00:11
Валидация поля для отправки формы shkarbatov Javascript под браузер 3 25.07.2011 14:07
Валидация формы dmsuslov jQuery 4 05.11.2010 16:12