валидация формы (продолжение)
по 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 раз, почему? Как изменить код чтобы избежать этого. Спасибо! |
Зачем вы дергаете DOM (причем MSDOM, который будет работать только в IE), когда работаете с элементом в цикле?
Не работает скрипт, потому что условие стоит не правильное, смотрите сами: if (el.name == "Sfone" && (el.value.length < 3)||isNaN(el.value)) errorList.push(5); А поскольку: true == false && false || true То ошибка будет срабатывать на всех полях. Сгруппируйте условия скобками. |
не работает((
у меня такая проблемаа. при неправльном заполнении алерт формируется и выводит что не заполненно но при нажатии ОК страничка перезагружается. подскажите в чем проблемма вот код
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; } |
Функция активируется наверняка кликом по input type=submit , используйте type=buttin или return false
|
спс дело было действительно в этом))
а не подскажете как вот сюда 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, время: 14:17. |