Валидация данных JavaScript

109
21 июня 2019, 13:40

Практикуюсь в JS, решил попробовать написать валидацию и со старта столкнулся с проблемой. Вот так всё работает, и страница не перезагружается.

<form name="welcome_form" ation="" onsubmit="return on_submit()" method="get">
  Login:<input type="text" name="login"/>
  Password:<input type="text" name="pass"/>
  <input type="submit" value="Go" />
</form>
<script>
  function on_submit() {
    var login = document.forms["welcome_form"]["login"].value;
    if (login == "") {
      alert("Error!");
      return false;
    }
  }
</script>

А вот так -- уже нет. Алерт выскакивает, после чего происходит перезагрузка страницы.

//HTML
<form name="welcome_form" ation="" method="get">
  Login: <input type="text" name="login"/>
  Password: <input type="text" name="pass"/>
  <input type="submit" value="Go" />
</form>
<script src="./script.js"></script>
//JS
document.forms["welcome_form"].addEventListener("submit", on_submit);
function on_submit() {
  var login = document.forms["welcome_form"]["login"].value;
  if (login == "") {
    alert("Error!");
    return false;
  }
}

Всё дело в

"onsubmit="return ..."

Без него страница все равно перезагружается при любой реализации.

Как разделить HTML и JS, и при этом заставить валидацию работать верно?

Answer 1

document.forms["welcome_form"].addEventListener("submit", on_submit); 
function on_submit(e) { 
  var login = document.forms["welcome_form"]["login"].value; 
  if (login == "") { 
    alert("Error!"); 
    e.preventDefault(); 
  } 
}
<form name="welcome_form" action="" method="get"> 
  Login: <input type="text" name="login"/> 
  Password: <input type="text" name="pass"/> 
  <input type="submit" value="Go" /> 
</form>

или

document.forms["welcome_form"].onsubmit = on_submit; 
function on_submit(e) { 
  var login = document.forms["welcome_form"]["login"].value; 
  if (login == "") { 
    alert("Error!"); 
    //e.preventDefault(); - это тоже работает 
    return false; 
  } 
}
<form name="welcome_form" action="" method="get"> 
  Login: <input type="text" name="login"/> 
  Password: <input type="text" name="pass"/> 
  <input type="submit" value="Go" /> 
</form>

Первый способ предпочтительнее, так как позволяет прикреплять больше одного обработчика.

READ ALSO
не могу подать запрос на backend NodeJs

не могу подать запрос на backend NodeJs

очередной раз, не могу правильно написать запрос, и не могу понять в чем собственно делоВот мой код, и так же приведу скрин ошибки которую...

98
Как реализовать эти задачи на практике, стажеру новичку (я даже некоторые вопросы не понял) [закрыт]

Как реализовать эти задачи на практике, стажеру новичку (я даже некоторые вопросы не понял) [закрыт]

Разработать программу сортировкиЧерез веб интерфейс можно вводить кол-во элементов массива, который должен сортироваться

114
Как передать заголовки из PHP в JS?

Как передать заголовки из PHP в JS?

Есть следующая проблема:

103