Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   валидация формы (продолжение) (https://javascript.ru/forum/misc/2484-validaciya-formy-prodolzhenie.html)

vovasvv 04.01.2009 18:57

валидация формы (продолжение)
 
по Googlу "валидация формы" я нашел и переделал (как смог, к сожалению я далеко не гуру в яве Sad) под себя такой скрипт:

<script type="text/javascript" language="javascript">
function checkForm(form) {
// Заранее объявим необходимые переменные
var el, // Сам элемент
elName, // Имя элемента формы
value, // Значение
type; // Атрибут type для input-ов
// Массив списка ошибок, по дефолту пустой
var errorList = [];
// Хэш с текстом ошибок (ключ - ID ошибки)
var errorText = { 
5 : "поле 'Код': д.б. трехзначный числовой",
6 : "поле 'телефон': должен содержать 7 цифр"
}
// Получаем семейство всех элементов формы
// Проходимся по ним в цикле
for (var i = 0; i < form.elements.length; i++) {
el = form.elements[i];
elName = el.nodeName.toLowerCase();
value = el.value;
if (elName == "input") { // INPUT
// Определяем тип input-а
type = el.type.toLowerCase();
// Разбираем все инпуты по типам и обрабатываем содержимое
switch (type) {
case "text" : 
if (el.name == "Sfone" && (document.forma.Sfone.value.length < 3)||isNaN(document.forma.Sfone.value)) errorList.push(5);
if (el.name == "Lfone" && (document.forma.Lfone.value.length < 7)||isNaN(document.forma.Lfone.value)) errorList.push(6);
break; 
}
}
}
// Финальная стадия
// Если массив ошибок пуст - возвращаем true
if (!errorList.length) return true;
// Если есть ошибки - формируем сообщение, выовдим alert
// и возвращаем false
var errorMsg = "При заполнении формы допущены следующие ошибки:\n\n";
for (i = 0; i < errorList.length; i++) {
errorMsg += errorText[errorList[i]] + "\n";
}
alert(errorMsg);
return false;
}
</script> --->


моя форма
<form name="forma" method="post" onsubmit="return checkForm(this);"> 

<p>Контактный мобильный телефон(10зн)*: +7-
<input type="text" name="Sfone" maxlength="3">-<input type="text" name="Lfone" maxlength="7"> "?"</p>

<input type="submit" name="submit" value="Ввести">
</form>


Если Вам не сложно, посмотрите пожалуйста следующий момент -
при введениеи в поля: <input type="text" name= "Sfone"> и <input type="text" name= "Lfone"> ЦИФР не удовлетворяющих условию - сообщение об ошибке выводится корректно, НО при введении БУКВ почему-то "сообщение об ошибке" циклится и выводится 7 раз, почему? Как изменить код чтобы избежать этого.
Спасибо!

Андрей Параничев 05.01.2009 21:32

Зачем вы дергаете DOM (причем MSDOM, который будет работать только в IE), когда работаете с элементом в цикле?
Не работает скрипт, потому что условие стоит не правильное, смотрите сами:
if (el.name == "Sfone" && (el.value.length < 3)||isNaN(el.value)) errorList.push(5);

А поскольку:
true == false && false || true

То ошибка будет срабатывать на всех полях. Сгруппируйте условия скобками.

NoCash 29.03.2010 15:59

не работает((
 
у меня такая проблемаа. при неправльном заполнении алерт формируется и выводит что не заполненно но при нажатии ОК страничка перезагружается. подскажите в чем проблемма вот код
function checkForm(nb_form2) {
// Заранее объявим необходимые переменные
var el, // Сам элемент
elName, // Имя элемента формы
value, // Значение
type; // Атрибут type для input-ов
// Массив списка ошибок, по дефолту пустой
var errorList = [];
// Хэш с текстом ошибок (ключ - ID ошибки)
var errorText = {
1 : "Не заполнено поле 'Имя'",
2 : "Не заполнено поле 'заголоовк'",
3 : "не выбран город",
4 : "не выбрана категория и подкатегория",
5 : "оставьте тельчик либо мыло для связи с вами",
6 : "введите цену",
7 : "не введен текст объявления",
8 : "решите пример",
}
// Получаем семейство всех элементов формы
// Проходимся по ним в цикле
for (var i = 0; i < nb_form2.elements.length; i++) {
el = nb_form2.elements[i];
elName = el.nodeName.toLowerCase();
value = el.value;
if (elName == "input") { // INPUT
// Определяем тип input-а
type = el.type.toLowerCase();
// Разбираем все инпуты по типам и обрабатываем содержимое
switch (type) {
case "text" :
if (el.name == "gnl_user" && value == "") errorList.push(1);
if (el.name == "gnl_name" && value == "") errorList.push(2);
if (el.name == "gnl_city" && value == "") errorList.push(3);
if (el.name == "gnl_phone" && el.name == "gnl_email" && value == "") errorList.push(5);
if (el.name == "gnl_price" && value == "") errorList.push(6);
if (el.name == "code" && value == "") errorList.push(8);
break;
default :
// Сюда попадают input-ы, которые не требуют обработки
// type = hidden, submit, button, image
break;
}
} else if (elName == "textarea") { // TEXTAREA
if (value == "") errorList.push(7);
} else if (elName == "select") { // SELECT
if (value == 0) errorList.push(4);
} else {
// Обнаружен неизвестный элемент ;)
}
}
// Финальная стадия
// Если массив ошибок пуст - возвращаем true
if (!errorList.length) return true;
// Если есть ошибки - формируем сообщение, выовдим alert
// и возвращаем false
var errorMsg = "При заполнении формы допущены следующие ошибки:\n\n";
for (i = 0; i < errorList.length; i++) {
errorMsg += errorText[errorList[i]] + "\n";
}
alert(errorMsg);
return false;
}

Aetae 29.03.2010 20:55

Функция активируется наверняка кликом по input type=submit , используйте type=buttin или return false

NoCash 30.03.2010 12:51

спс дело было действительно в этом))
а не подскажете как вот сюда
if (el.name == "code" && value == "") errorList.push(6);

впихнуть проверку с аякса
function Refresh()
{
  if( req.readyState == 4 )
    ge('ajax').innerHTML = req.responseText;
    else
 ge('ajax').innerHTML = 'проверяем';


}

function Pusk()
{ 
var query; 
query ='code='+encodeURIComponent(ge('myid').value);
Request(query);


Часовой пояс GMT +3, время: 06:25.