Кнопка отправки формы HTML, обновляющая страницу - PullRequest
0 голосов
/ 27 июня 2018

Я сейчас пишу регистрационную форму в HTML и столкнулся с парой проблем. Во-первых, у меня должна быть отдельная кнопка вне тегов формы, чтобы запустить функцию, так как моя кнопка отправки просто отправляет форму, если поля ввода введены неправильно, показывая только сигналы проверки в течение доли секунды. Во-вторых, если я правильно ввожу адрес электронной почты, он говорит, что «email.includes» недействителен, однако он все равно работает как должен, эта ошибка не появляется, если я ввожу неправильный адрес электронной почты. Спасибо за любые ответы (я знаю, что мой код не очень хороший, я все еще многому учусь)

function validate_form() {
  var forename = document.getElementById("forename");
  var surname = document.getElementById("surname");
  var username = document.getElementById("username");
  var password = document.getElementById("password");
  var re_password = document.getElementById("re_password");
  var email = document.getElementById("email");
  var errors = 0
  var special_chars = "<>@!#$%^&*()_+[]{}?:;|'\"\\,./~`-=";

  if (forename.value == "") {
    //document.getElementById("forename").style.background = "red";
    forename_confirmation.style.visibility = 'visible';
    var errors = errors + 1
  } else
    for (var i = 0; i < forename.value.length; i++) {
      if (special_chars.indexOf(forename.value.charAt(i)) != -1) {
        forename_chars.style.visibility = 'visible'
      }
    }

  if (surname.value == "") {
    //document.getElementById("surname").style.background = "red";
    surname_confirmation.style.visibility = 'visible';
    var errors = errors + 1
  } else
    for (var i = 0; i < surname.value.length; i++) {
      if (special_chars.indexOf(surname.value.charAt(i)) != -1) {
        surname_chars.style.visibility = 'visible'
      }
    }

  if (username.value == "") {
    //document.getElementById("username").style.background = "red";
    username_confirmation.style.visibility = 'visible';
    var errors = errors + 1
  } else
    for (var i = 0; i < username.value.length; i++) {
      if (special_chars.indexOf(username.value.charAt(i)) != -1) {
        username_chars.style.visibility = 'visible'
      }
    }

  if (password.value == "") {
    //document.getElementById("password").style.background = "red";
    pass_confirmation.style.visibility = 'visible';
    var errors = errors + 1
  }

  if (password.value != re_password.value) {
    //document.getElementById("re_password").style.background = "red";
    repass_confirmation.style.visibility = 'visible';
    var errors = errors + 1
  }

  if (email.value == "") {
    //document.getElementById("email").style.background = "red";
    var errors = errors + 1
  }

  if (errors != "0") {
    alert("Whoops! Looks like you didn't enter your details properly")
  }
  if (!email.value.includes("@") || !email.includes(".")) {
    //document.getElementById("email").style.background = "blue";
    email_confirmation.style.visibility = 'visible';
    return false;
  }
  return (true);
}
<!DOCTYPE html>
<html>

<head>
  <title>Login form</title>
  <link rel="stylesheet" type="text/css" href="Login Form CSS.css">
  <script src="Registration function.js" defer></script>

  <body>
    <div class="loginbox">
      <img src="Logo.jpg" class="avatar">
      <h1> Create Account </h1>
      <form name="login-form">
        <div id="forename_confirmation"> Please fill in this box </div>
        <div id="forename_chars"> Don't use special characters</div>
        <p>Forename
          <p>
            <input type="text" name="forename" id="forename" placeholder="Enter Forename here">
            <div id="surname_confirmation"> Please fill in this box </div>
            <div id="surname_chars"> Don't use special characters</div>
            <p>Surname
              <p>
                <input type="text" name="surname" id="surname" placeholder="Enter Surname here">
                <div id="username_confirmation"> Please fill in this box </div>
                <div id="username_chars"> Don't use special characters</div>
                <p>Username
                  <p>
                    <input type="text" name="username" id="username" placeholder="Enter Username here">
                    <div id="pass_confirmation"> Please fill in this box </div>
                    <div id="pass_chars">Don't use special characters</div>
                    <p>Password
                      <p>
                        <input type="password" name="password" id="password" placeholder="Enter Password here">
                        <div id="repass_confirmation"> Passwords do not match </div>
                        <p>Re-enter Password
                          <p>
                            <input type="password" name="re_password" id="re_password" placeholder="Re-enter your password here">
                            <div id="email_confirmation"> Please enter a valid email </div>
                            <p>Email
                              <p>
                                <input type="email" name="email" id="email" placeholder="Enter Email here">
                                <!-- 
                  <p>Gender<p>
                  <input type="radio" id="Male" name="Gender" value="Male">Male</input>
                  <input type="radio" id="Female" name="Gender" value="Female">Female</input>
                  -->
                                <button onclick="validate_form()" type="Submit" value="True" name="button-submit"> Submit </button>
                                <br />
                                <br />
                                <a href="#"> Forgot your password? </a>
                                <br />
                                <a href="#"> Already got an account? </a>
                                <br /><br />
      </form>
      <!-- <button onclick="validate_form()" type="submit"> Validate </button> -->
    </div>
  </body>
</head>
<script>
  forename_confirmation.style.visibility = 'hidden'
  forename_chars.style.visibility = 'hidden'
  surname_confirmation.style.visibility = 'hidden'
  surname_chars.style.visibility = 'hidden'
  username_confirmation.style.visibility = 'hidden'
  username_chars.style.visibility = 'hidden'
  pass_confirmation.style.visibility = 'hidden'
  pass_chars.style.visibility = 'hidden'
  repass_confirmation.style.visibility = 'hidden'
  email_confirmation.style.visibility = 'hidden'
</script>
</body>

</html>

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Два вопроса здесь:

Если вы не хотите отправлять свою форму (например, введенные данные неверны), вам нужно будет запретить ее отправку. В JavaScript вы можете сделать это с помощью preventDefault().

Итак, для этого я добавил строку event.preventDefault() к вашему if statement, которая проверяет наличие ошибок. Помните, что вам нужно передать параметр event в вашу функцию, чтобы заставить preventDefault() работать.


Во-вторых, вам нужно проверить, если value вашего поля электронной почты includes что-то.

У вас есть поле электронной почты, например: var email = document.getElementById('email');, поэтому вам нужно проверить value следующим образом: email.value.includes('bla').


Все вместе, ваш скрипт прекрасно работает:

function validate_form(event) {
  var forename = document.getElementById("forename");
  var surname = document.getElementById("surname");
  var username = document.getElementById("username");
  var password = document.getElementById("password");
  var re_password = document.getElementById("re_password");
  var email = document.getElementById("email");
  var errors = 0
  var special_chars = "<>@!#$%^&*()_+[]{}?:;|'\"\\,./~`-=";

  if (forename.value == "") {
    //document.getElementById("forename").style.background = "red";
    forename_confirmation.style.visibility = 'visible';
    var errors = errors + 1
  } else
    for (var i = 0; i < forename.value.length; i++) {
      if (special_chars.indexOf(forename.value.charAt(i)) != -1) {
        forename_chars.style.visibility = 'visible'
      }
    }

  if (surname.value == "") {
    //document.getElementById("surname").style.background = "red";
    surname_confirmation.style.visibility = 'visible';
    var errors = errors + 1
  } else
    for (var i = 0; i < surname.value.length; i++) {
      if (special_chars.indexOf(surname.value.charAt(i)) != -1) {
        surname_chars.style.visibility = 'visible'
      }
    }

  if (username.value == "") {
    //document.getElementById("username").style.background = "red";
    username_confirmation.style.visibility = 'visible';
    var errors = errors + 1
  } else
    for (var i = 0; i < username.value.length; i++) {
      if (special_chars.indexOf(username.value.charAt(i)) != -1) {
        username_chars.style.visibility = 'visible'
      }
    }

  if (password.value == "") {
    //document.getElementById("password").style.background = "red";
    pass_confirmation.style.visibility = 'visible';
    var errors = errors + 1
  }

  if (password.value != re_password.value) {
    //document.getElementById("re_password").style.background = "red";
    repass_confirmation.style.visibility = 'visible';
    var errors = errors + 1
  }

  if (email.value == "") {
    //document.getElementById("email").style.background = "red";
    var errors = errors + 1
  }

  if (errors != "0") {
    alert("Whoops! Looks like you didn't enter your details properly");
    event.preventDefault(); // Prevent the form from submitting
  }
  if (!email.value.includes("@") || !email.value.includes(".")) {
    //document.getElementById("email").style.background = "blue";
    email_confirmation.style.visibility = 'visible';
    return false;
  }
  return (true);
}
<!DOCTYPE html>
<html>

<head>
  <title>Login form</title>
  <link rel="stylesheet" type="text/css" href="Login Form CSS.css">
  <script src="Registration function.js" defer></script>

  <body>
    <div class="loginbox">
      <img src="Logo.jpg" class="avatar">
      <h1> Create Account </h1>
      <form name="login-form">
        <div id="forename_confirmation"> Please fill in this box </div>
        <div id="forename_chars"> Don't use special characters</div>
        <p>Forename
          <p>
            <input type="text" name="forename" id="forename" placeholder="Enter Forename here">
            <div id="surname_confirmation"> Please fill in this box </div>
            <div id="surname_chars"> Don't use special characters</div>
            <p>Surname
              <p>
                <input type="text" name="surname" id="surname" placeholder="Enter Surname here">
                <div id="username_confirmation"> Please fill in this box </div>
                <div id="username_chars"> Don't use special characters</div>
                <p>Username
                  <p>
                    <input type="text" name="username" id="username" placeholder="Enter Username here">
                    <div id="pass_confirmation"> Please fill in this box </div>
                    <div id="pass_chars">Don't use special characters</div>
                    <p>Password
                      <p>
                        <input type="password" name="password" id="password" placeholder="Enter Password here">
                        <div id="repass_confirmation"> Passwords do not match </div>
                        <p>Re-enter Password
                          <p>
                            <input type="password" name="re_password" id="re_password" placeholder="Re-enter your password here">
                            <div id="email_confirmation"> Please enter a valid email </div>
                            <p>Email
                              <p>
                                <input type="email" name="email" id="email" placeholder="Enter Email here">
                                <!-- 
                  <p>Gender<p>
                  <input type="radio" id="Male" name="Gender" value="Male">Male</input>
                  <input type="radio" id="Female" name="Gender" value="Female">Female</input>
                  -->
                                <button onclick="validate_form(event)" type="Submit" value="True" name="button-submit"> Submit </button>
                                <br />
                                <br />
                                <a href="#"> Forgot your password? </a>
                                <br />
                                <a href="#"> Already got an account? </a>
                                <br /><br />
      </form>
      <!-- <button onclick="validate_form()" type="submit"> Validate </button> -->
    </div>
  </body>
</head>
<script>
  forename_confirmation.style.visibility = 'hidden'
  forename_chars.style.visibility = 'hidden'
  surname_confirmation.style.visibility = 'hidden'
  surname_chars.style.visibility = 'hidden'
  username_confirmation.style.visibility = 'hidden'
  username_chars.style.visibility = 'hidden'
  pass_confirmation.style.visibility = 'hidden'
  pass_chars.style.visibility = 'hidden'
  repass_confirmation.style.visibility = 'hidden'
  email_confirmation.style.visibility = 'hidden'
</script>
</body>

</html>
0 голосов
/ 27 июня 2018

Если есть ошибка проверки, вам нужно запретить поведение события по умолчанию, чтобы браузер не перенаправлял на целевую страницу (что вы указали в атрибуте действия, или перезагрузил текущую страницу, если она не указана): https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault

Ваш второй вопрос: я полагаю, он содержит email.value.include (как вы уже использовали в своем коде в другом месте), и вы хотите проверить значение, а не сам HTML-узел. Возможно, вы также захотите посмотреть проверку регулярности регулярных выражений в электронной почте, которая лучше соответствовала бы требованиям проверки электронной почты, чем проверка на "@" an "." например https://www.w3resource.com/javascript/form/email-validation.php

...