Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > провера поля формы


Автор: DENAT 5.6.2008, 14:59
в этой форме проверяется поля e-mail на наличее знака @ а надо чтоб он проверял еще добаленные поля e-mail smile ЗАРАНЕЕ СПАСИБО!!!!!!
Код

<html>
<head>
    <title>Добавление полей в форму</title>
    
<script type="text/javascript">
var countOfFields = 1; // Текущее число полей
var a = 0; // Уникальное значение для атрибута name
var maxFieldLimit = 5; // Максимальное число возможных полей
function deleteField(a) {
    // Получаем доступ к ДИВу, содержащему поле
    var contDiv = a.parentNode;
    // Удаляем этот ДИВ из DOM-дерева
    contDiv.parentNode.removeChild(contDiv);
    // Уменьшаем значение текущего числа полей
    countOfFields--;
    // Возвращаем false, чтобы не было перехода по сслыке
    return false;
}
function addField() {
    // Проверяем не достигло ли число полей максимума
    if (countOfFields >= maxFieldLimit) {
        alert("ВСЕ");
        return false;
    }
    // Увеличиваем текущее значения числа полей
    countOfFields++;
    // Увеличиваем ID
    a++;
    // Создаем элемент ДИВ
    var div = document.createElement("div");
    // Добавляем HTML-контент с пом. свойства innerHTML
    div.innerHTML = "<input name=\"name" + a +"\" type=\"text\" /> <a onclick=\"return deleteField(this)\" href=\"#\">[X]</a>";
    // Добавляем новый узел в конец списка полей
    document.getElementById("parentId").appendChild(div);
    // Возвращаем false, чтобы не было перехода по сслыке
    return false;

}

function test2(form) {
  if (form.name_.value == "" ||  form.name_.value.indexOf('@', 0) == -1) 
        alert("Неверно введен адрес e-mail!");
  else alert("OK!");
}

</script>
</head>
<body>
<form  method="GET" action="#" name="form1">
<input type="submit" value="Послать на e-mail">
    <div id="parentId">
        <div><input name="name" type="text" />Фамилия
        <div><input name="name" type="text" />Имя

<div><input name="name_" type="text" />е-mail
<input type="button" name="button2" value="Проверка e-mail" onClick="test2(this.form)">
<a onclick="return addField()" href="#">Добавить еще поле E-mail</a></div>





сории за ошибочку в названии темы smile 

Автор: krundetz 5.6.2008, 15:56
Все очень просто надо чтобы все ваши поля с e-mail имели бы одинаковые идентификаторы например класс "e-mail", далее вы их все находите у вас будет масив а затем пробегаете делая точно такуюже проверку как вы делаете сейчас.
Кстати ваш скрипт примет за e-mail и такую строку: k@k

Автор: DENAT 5.6.2008, 17:02
Цитата(krundetz @ 5.6.2008,  15:56)
Все очень просто надо чтобы все ваши поля с e-mail имели бы одинаковые идентификаторы например класс "e-mail", далее вы их все находите у вас будет масив а затем пробегаете делая точно такуюже проверку как вы делаете сейчас.
Кстати ваш скрипт примет за e-mail и такую строку: k@k

Если можно то покажите на примере как это сделать(я еще токо осваиваю js).
Ну и спасибо за то что уже подсказали!!!! smile 

Автор: krundetz 6.6.2008, 11:42
Начнем по порядку:
1. Меняете
Код

<input name="name_" type="text" />

на
Код

<input name="name_" type="text" class="e-mail"/>

2. В функции которая создает меняем
Код

div.innerHTML = "<input name=\"name" + a +"\" type=\"text\" /> <a onclick=\"return deleteField(this)\" href=\"#\">[X]</a>";

на
Код

div.innerHTML = "<input name=\"name" + a +"\" type=\"text\"  class="e-mail"/> <a onclick=\"return deleteField(this)\" href=\"#\">[X]</a>";

3. Функция которая проверяет примет следующий вид.
Код

function test2(form) 
{
     elements = form.getElementByTagName('input');
     size = element.length;
     for(var i = 0; i < size; i++)
     {
          if(elements[i].getAttribute('class') == 'e-mail')
          {
               if (elements[i].value == "" || elements[i].value.indexOf('@', 0) == -1)
                      alert("Неверно введен адрес e-mail!");
               else alert("OK!");
          }
     }
}

Возможно лучше использовать createElement вместо innerHTML так как innerHTML не создает элемент в дом структуре вроде а значит его нельзя будет найти.
Также проверку e-mail лучше делать регулярным выражением.

Автор: Ghirik 7.6.2008, 07:33
krundetz, создает....

Здесь где то было, но лень искать, вот у меня сохранена копия примера.

Код

<html>
<head>
<script type="text/javascript">
var counter = 0;
function addDOM(ob) {
   var inp = document.createElement('input');
      ob.appendChild(inp);
        inp.setAttribute('name','dom'+(counter++));
        inp.setAttribute('type','text');
        inp.setAttribute('value','В порядке?');
}
function addInnerHTML(ob) {
   ob.innerHTML+='<input type="text" name="inner'+(counter++)+'" value="В порядке?" />';
}
</script>
</head>
<body>
<input value="HTML" type="button" onclick=alert(document.body.innerHTML)>
<form action="info.php">
    <input type="text" name="one" value="В порядке" />
    <input type="text" name="two" value="В порядке?" style="display:none" />
    <input type="button" value="Добавить через DOM" onclick="addDOM(this.form)" />
    <input type="button" value="Добавить через innerHTML" onclick="addInnerHTML(this.form)" />
    <input type="submit" />
</form>
</body>
</html>


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)