Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.04.2015, 23:51
Интересующийся
Отправить личное сообщение для sana Посмотреть профиль Найти все сообщения от sana
 
Регистрация: 31.03.2015
Сообщений: 15

проверка формуляра на корректность заполнения
Добрый вечер,
У меня всего два поля: имя и емеил. Проверка формуляра работает некорректно. До тех пор пока не введется имя, емеил не проверяется. Хотелось бы сделать так, чтобы, когда запускалась функция проверки при нажатии на кнопку ок,имя и емеил проверялись одновременно. Как это можнл сделать?

function check(form){
 if(form.name.value.length<1){
  alert("Введиье имя!");
  return false;
 }

 
 email=form.email.value;
 if (email.indexOf("@")==-1 || email.indexOf("@")<1 || email.lastIndexOf(".")>email.length-3 || email.lastIndexOf(".")<email.length-5){
  alert("Неправильный e-postadress!");
  return false;
 }

 return true;
}


<form onSubmit="return check(this)" action="thanks.html">
    <fieldset>
        <legend>Введите данные</legend>
        <p>Name: <input name="name" type="text" id="name"></p>
        <p>E-mail: <input name="email" type="text" id="email"></p>
        <input type="submit" value="Ok" id="submit">
    </fieldset>
</form>
Ответить с цитированием
  #2 (permalink)  
Старый 24.04.2015, 00:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

sana,
сделайте 1 return в функции а не три как сейчас
Ответить с цитированием
  #3 (permalink)  
Старый 24.04.2015, 11:05
Интересующийся
Отправить личное сообщение для sana Посмотреть профиль Найти все сообщения от sana
 
Регистрация: 31.03.2015
Сообщений: 15

Сообщение от рони Посмотреть сообщение
sana,
сделайте 1 return в функции а не три как сейчас
Теперь получается, что функция проверяет одновременно оба поля, хотя поле емейла еще даже не заполнено.

function check(form){
 if(form.name.value.length<1){
  alert("Введите имя!");

 }



 if (form.email.value.indexOf("@")==-1 || email.indexOf("@")<1 || email.lastIndexOf(".")>email.length-3 || email.lastIndexOf(".")<email.length-5){
  alert("Неправильный e-postadress!");

 }

return false;

}
Ответить с цитированием
  #4 (permalink)  
Старый 24.04.2015, 11:15
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Харе тупить, функция проверки должна возвращать или коды проверки или мессагу с результатом проверки.
Ответить с цитированием
  #5 (permalink)  
Старый 24.04.2015, 11:22
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

function isvalid(el){
 var log=[];
 if(el.name.value.trim().length<1)
   log.push("Короче, имя не должно быть короче 1 буквы");
 if(el.email.value.indexOf("@")==-1)
   log.push('И имейла без собаки не бывает');
 if(log.length) {
   alert( log.join('<br>'));
   return false;
 }
  else
   return true;
}


в нажатии кнопки

return isvalid(this.form); // если вернется фолс - событие не проканает, а если тру - проканает дальше и форма отправится

Последний раз редактировалось kostyanet, 24.04.2015 в 11:39.
Ответить с цитированием
  #6 (permalink)  
Старый 24.04.2015, 11:26
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

sana,

<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
   <script>
   function check(form) {
      var ok = true;
       if (form.name.value.length < 1) {

           alert("Введите имя!");
           ok = false;
       }
       var email = form.email.value;
       if (email.indexOf("@") == -1 || email.indexOf("@") < 1 || email.lastIndexOf(".") > email.length - 3 || email.lastIndexOf(".") < email.length - 5) {
           alert("Неправильный e-postadress!");
           ok = false;
       }
       return ok;
   }

  </script>
</head>

<body>
<form onSubmit="return check(this)" action="thanks.html">
    <fieldset>
        <legend>Введите данные</legend>
        <p>Name: <input name="name" type="text" id="name"></p>
        <p>E-mail: <input name="email" type="text" id="email"></p>
        <input type="submit" value="Ok" id="submit">
    </fieldset>
</form>


</body>

</html>
Ответить с цитированием
  #7 (permalink)  
Старый 24.04.2015, 11:37
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Для имейлов применяют вот такой паттерн

^[^\s@]+@[^\s@]+\.[^\s@]+$

пишите его прямо в атрибут pattern="^[^\s@]+@[^\s@]+\.[^\s@]+$" и там можно либо встроенную валидацию формы заюзать, либо уже в цикле прогнать скриптом все найденные поля. А чтобы и сообщения об ошибках не хранить в скрипте, так же в атрибут data-err="Короче, имя не должно быть короче 1 буквы" можно записать.

То есть примерно так

for(var i=0,inputs=form.elements,inp,log=[];inp=inputs[i];i++)
if(!new RegExp(inp.getAttribute('pattern')).test(inp.value)
  log.push(inp.getAttribute('data-err'));



Ну далее по месту. То есть это будет вся валидация для любого количества полей в форме при условии что у всех у них есть паттерн с регой и дата-ерр
Ответить с цитированием
  #8 (permalink)  
Старый 24.04.2015, 11:41
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

кроме файлов, конечно. с файлами - геморрой капец.

Регами и на минимальную длину все проверяется. Например имя или там фамилия.

Да, form.elements подгребет и все кнопки. Надо проверять чтоб не кнопка или не делать кнопки, а нарисовать обычный <a>Отправить</a>

Да и возвращать ничего не надо в случае когда валидация идет по нажатию кнопки. Это когда по вводу. А когда кнопка уже нажата то если лог ошибок не пустой - form.submit() и все.

Точнее зависит от реализации. Если инлайн профтыкали типа onsubmit="isvalid(this)" то вернув false отмените событие. А если забиндили <a> через addEventListener и нашли форму, то деваться некуда - надо ее отправлять form.submit()

Последний раз редактировалось kostyanet, 24.04.2015 в 11:49.
Ответить с цитированием
  #9 (permalink)  
Старый 29.04.2015, 16:14
Интересующийся
Отправить личное сообщение для sana Посмотреть профиль Найти все сообщения от sana
 
Регистрация: 31.03.2015
Сообщений: 15

Переписала код, но есть неточность. Если поле с емейлом указано верно, а поле с именем не заполнено, то данные отправляются. Если же емеил и имя указаны некорректно,то появляется окно с указанием ошибок. Что не так?

function check(form) {
  var nameIsOk = true;
  var emailIsOk = true;
  var errorMsg = "";

  if (form.name.value.length < 1) {
    errorMsg += "забыл имя";
    nameIsOk = false;
  }

  var email = form.email.value;
  var atPos = email.indexOf("@");
  var lastDotPos = email.lastIndexOf(".");

  if (email.length == 0) {
    if (!nameIsOk) {
      errorMsg += "\n";
    }
    errorMsg += "забыл email!";
    emailIsOk = false;
  } else if (email.length < 6
      || atPos == -1
      || atPos != email.lastIndexOf("@")
      || atPos < 1
      || lastDotPos <= atP + 1
      || lastDotPos + 2 >= email.length) {
    emailIsOk = false;
    if (!nameIsOk) {
      errorMsg += "\n";
    }
    errorMsg += "Email '" + email + "' некорректный адрес. ";
  }

  if (!nameIsOk || !emailIsOk) {
    alert(errorMsg);
    return false;
  }

  return true;
}

Последний раз редактировалось sana, 29.04.2015 в 16:16.
Ответить с цитированием
  #10 (permalink)  
Старый 29.04.2015, 17:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

sana,
строка 25
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка заполнения полей формы kefalia Общие вопросы Javascript 25 23.04.2016 01:05
Проверка условия заполнения формы дата рождения vitya_rk Общие вопросы Javascript 1 20.12.2014 16:19
Проверка заполнения формы zoOmer Оффтопик 3 27.05.2013 08:30
Проверка заполнения элементов формы Olegans Элементы интерфейса 0 07.04.2013 21:11
Проверка заполнения полей x-miller-x Общие вопросы Javascript 4 10.10.2012 10:45