Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Проблемы JS при проверке полей формы (https://javascript.ru/forum/dom-window/13588-problemy-js-pri-proverke-polejj-formy.html)

Ordinatuer 05.12.2010 05:54

Проблемы JS при проверке полей формы
 
Здравстуйте!
Имеется небольшая форма:

<form>
<input type="text" name="name" id="name" value="Ваше имя" size="20" onblur="checkThis(a)" />
<span id="nameError"></span><br />
<input type="text" name="email" id="email" value="Ваш email" size="20" onblur="checkThis(b)" />
<span id="emailError"></span><br />
<textarea name="text" id="text" onblur="checkThis(c)">Текст Вашего сообщения</textarea>
<span id="textError"></span><br />
<input type="submit" value="Оставить сообщение" />
</form>


и вот такой страшный скрипт проверки:

var sizeError = new Array();
var voidError = new Array();
var fieldError = new Array();
var defVal = new Array();
 
        a = document.getElementById('name');
        b = document.getElementById('email');
        c = document.getElementById('text');
        sizeError[a] = "Длина имени должна быть менее 10 символов",
        voidError[a] = "Пустое имя недопустимо",
        fieldError[a] = "nameError",
        defVal[a] = "Ваше имя",
            
        sizeError[b] = "Длина электронного адреса не более 30 символов",
        voidError[b] = "Введите Ваш электронный адрес",
        fieldError[b] = "emailError",
        defVal[b] = "Ваш email",
        
        sizeError[c] = "Сообщение не длиннее 255 символов",
        voidError[c] = "Пустое сообщение недопустимо",
        fieldError[c] = "textError",
        defVal[c] = "Текст Вашего сообщения";
        
function checkThis(x) { 
                          alert(sizeError[x]+"\n"+voidError[x]+"\n"+fieldError[x]+"\n"+defVal[x]);
    if ((x.value.length)>3) {
        document.getElementById(fieldError[x]).innerHTML = sizeError[x];
      }
    if ((x.value) == "")  {
        document.getElementById(fieldError[x]).innerHTML = voidError[x];
      }
    if ((x.value) == defVal[x]) {
        document.getElementById(fieldError[x]).innerHTML = voidError[x];
 
      }
    }


Проблема: onblur на инпуте "name" работает абсолютно также, как на "email".
На "text" при этом работает как надо.

рони 05.12.2010 16:46

Ordinatuer,
А где элемент id = 'errors' ?

Ordinatuer 05.12.2010 19:46

Это просто отладка - можно заменить его алертом. Что в лоб, что по лбу.
Полдня убил, ничего не нашёл... Сделал по-другому.

рони 05.12.2010 20:27

Ordinatuer,
Не нужно использовать в качестве имени элемента массива обьект
a = document.getElementById('name'); toString = [object HTMLInputElement]

b = document.getElementById('email'); toString = [object HTMLInputElement]

c = document.getElementById('text'); toString = [object HTMLTextAreaElement]

отсюда sizeError[b] = sizeError[a]

ksa 05.12.2010 21:18

Дюже долгая подготовка к анализу полей... Как вариант вообще все анализировать в онсубмит...

Ordinatuer 06.12.2010 04:18

Да, действительно... Надо бы мне в учебных материалах тереться, а не тут. Спасибо за участие.


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