Почему Javascript не проверяет мой HTML-код? - PullRequest
1 голос
/ 23 сентября 2019

Это моя первая попытка работы с javascript и формами;почему-то элементы моего html-сайта не проверяются, и я не знаю почему.Моя цель с помощью этой формы - попытаться проверить элементы, которые имеют «*» рядом с ними.По некоторым причинам единственный проверяемый элемент - это электронная почта и ничего больше.Имя, даты, флажок не.Я пытался найти решение, но, похоже, ничего не работает.

<!doctype html>
<html>
<head>
    <link href="styles.css" rel="stylesheet">
    <script src="script.js"></script>
    <meta charset="utf-8">
    <title>Form</title>
</head>

<body>
<div class="container">

    <h1>Travel Reservation Form</h1>
    <h4>* denotes mandotory field</h4>
    <form name="myForm" action="action_page.php" onsubmit="return validateForm()" method="post">


        <fieldset>
            <legend>Personal Details</legend>
            <label class="align">Full name:<span>*</span></label> <input type="text" name="fullname" placeholder="James Bond">
            <br><br>

            <label class="align">Email<span>*</span></label>
            <input type="email" name="mail" placeholder="james@gmail.com">
            <br><br>

            <label class="align">Date of Birth<span>*</span></label> <input type="date" name="DOB" placeholder="dd/mm/yy">

        </fieldset>
        <br>

        <label>Select Tour Package<span>*</span>:</label>
        <select name="package">
            <option value="1">Tokyo</option>
            <option value="2">Shanghai</option>
            <option value="3">Bangkok</option>
            <option value="4">Jakarta</option>
            <option value="5">Mumbai</option>
        </select>




        <label>Number of persons<span>*</span>:</label>
        <select name="party">
            <option value="1">One Adult</option>
            <option value="2">Two Adults</option>
            <option value="3">Three Adults</option>
            <option value="4">Four Adults</option>
            <option value="5">Five Adults</option>
        </select>

        <br><br>



        <label>Arrival Date<span>*</span>:</label> <input type="date" name="arrival" placeholder="dd/mm/yy">
        <br><br>


        <p>What Intrests you the most?<span>*</span>:</p>

        <input class="alignp" type="checkbox" name="interest" value="shopping"> Shopping <br><br>

        <input class="alignp"  type="checkbox" name="interest" value="dining"> Dining <br><br>

        <input class="alignp"  type="checkbox" name="interest" value="dancing"> Dancing <br><br>

        <input class="alignp"  type="checkbox" name="interest" value="SightS"> Sightseeing <br><br><br>



        <label>Discount Coupon code:</label> <input type="text" name="dis_code" value=""><br><br>



        <label>Terms and Conditions<span>*</span><input type="radio" name="tos" value="yes" checked>I agree</label>
        <input type="radio" name="tos" value="yes">I disagree





        <p>Please provide any additional information below:- </p>
        <textarea name="message" rows="5" cols="45" placeholder="Please type here...."></textarea><br><br>



        <button class="btn-submit" type="submit" value="Submit">Submit</button>
        <button class="btn-reset" type="reset" value="Reset">Reset</button>

    </form>
</div>
</body>
</html>

Вот javascript, который связан в html.Я не уверен, связана ли проблема с моим HTML-кодом или с моим JavaScript.

// JavaScript Document
function validateForm()
{
    var name = document.forms["myForm"]["name"].value;
    var email = document.forms["myForm"]["email"].value;
    var dob = document.forms["myForm"]["DOB"].value;
    var packages = document.forms["myForm"]["package"].value;
    var arrival = document.forms["myForm"]["arrival"].value;
    //var interest = document.forms["form"]["interest"].value;
    var ToS = document.forms["myForm"]["tos"].value;
    var checkbox = document.querySelector('input[name="interest"]:checked');
    var matches = name.match(/\d+/g);


    if (matches != null) {
        alert("Name has a number in it!");
    }

    if (name == "") {
        alert("Name must be filled out");
        return false;
    }

    if (email == "") {
        alert("Email must be filled out");
        return false;
    }

    if (dob == "") {
        alert("Date of Birth must not be empty");
        return false;
    }

    if (arrival == "") {
        alert("Arrival Date must not be empty");
        return false;
    }
    if(ToS == false) {
        alert("You must agree to the Terms of Service");
        return false;

    }

    if(validateEmail(email) == false){
        alert("Must enter a valid email");
    }


    re = /^\d{1,2}\/\d{1,2}\/\d{4}$/;

    if(dob != '' && !dob.match(re)) {
        alert("Invalid date format");
        return false;
    }

    if(arrival != '' && !arrival.match(re)) {
        alert("Invalid arrival date format") ;
        return false;
    }

    if(name.length >= 30){
        alert("Name must be less than 30 characters!");
        return false;

    }

    if(!checkbox){
        alert("Please select an interest!");
        return false;
    }

}

function validateEmail(email)
{
    return /\S+@\S+\.\S+/.test(email);
}

1 Ответ

0 голосов
/ 23 сентября 2019

Так что я понятия не имею, что сделала ваша PHP-форма, поэтому я сейчас просто извлек весь код формы.Было много маленьких проблем, но честных ошибок.Пример: вы не хотите возвращать оператор после каждой проверки, если хотите продолжить проверку остальных полей.Я объединил несколько отдельных проверок в if / else, поскольку они были проверками в одном и том же поле.Я использовал идентификаторы, чтобы упростить свою жизнь, и с тех пор, как сбросил код формы.Не стесняйтесь переключаться обратно на то, что вы хотите.Я также обновил ваше регулярное выражение, поскольку поле даты возвращает ГГГГ / ММ / ДД.Так как это нигде не публикуется, вы можете поиграть с ним некоторое время, прежде чем вернуться в форму php.Я также вытащил чек на 30 символов и добавил к имени максимальную длину поля.Вы также можете установить минимальные и максимальные диапазоны дат для полей даты и множество других вещей, чтобы сделать сами поля более надежными.Есть также библиотеки, которые занимаются такими вещами для вас, вам не нужно заново изобретать колесо, но если вы просто хотите поиграть с этим, это должно помочь вам начать.Удачи

<!doctype html>
<html>

<body>
  <div class="container">

    <h1>Travel Reservation Form</h1>
    <h4>* denotes mandotory field</h4>


    <fieldset>
      <legend>Personal Details</legend>
      <label class="align">Full name:<span>*</span></label> <input type="text" name="fullname" id='name' maxlength="30" placeholder="James Bond">
      <br><br>

      <label class="align">Email<span>*</span></label>
      <input id="email" type="email" name="mail" placeholder="james@gmail.com">
      <br><br>

      <label class="align">Date of Birth<span>*</span></label> <input type="date" id="dob" name="DOB" placeholder="dd/mm/yy">

    </fieldset>
    <br>

    <label>Select Tour Package<span>*</span>:</label>
    <select id='package' name="package">
      <option value="1">Tokyo</option>
      <option value="2">Shanghai</option>
      <option value="3">Bangkok</option>
      <option value="4">Jakarta</option>
      <option value="5">Mumbai</option>
    </select>




    <label>Number of persons<span>*</span>:</label>
    <select name="party">
      <option value="1">One Adult</option>
      <option value="2">Two Adults</option>
      <option value="3">Three Adults</option>
      <option value="4">Four Adults</option>
      <option value="5">Five Adults</option>
    </select>

    <br><br>



    <label>Arrival Date<span>*</span>:</label> <input type="date" name="arrival" id="arrival" placeholder="dd/mm/yy">
    <br><br>


    <p>What Intrests you the most?<span>*</span>:</p>

    <input class="alignp" type="checkbox" name="interest" value="shopping"> Shopping <br><br>

    <input class="alignp" type="checkbox" name="interest" value="dining"> Dining <br><br>

    <input class="alignp" type="checkbox" name="interest" value="dancing"> Dancing <br><br>

    <input class="alignp" type="checkbox" name="interest" value="SightS"> Sightseeing <br><br><br>



    <label>Discount Coupon code:</label> <input type="text" name="dis_code" value=""><br><br>



    <label>Terms and Conditions<span>*</span>
      <input type="radio" name="tos" id="accpeted" value="agree" checked>I agree</label>
    <input type="radio" name="tos" id="unaccepted" value="disagree">I disagree





    <p>Please provide any additional information below:- </p>
    <textarea name="message" rows="5" cols="45" placeholder="Please type here...."></textarea><br><br>



    <button class="btn-submit" id="submit" onclick="return validateForm()">Submit</button>



  </div>

  <script>
    // JavaScript Document
    function validateForm() {
      var name = document.getElementById("name").value;
      var email = document.getElementById("email").value;
      var dob = document.getElementById("dob").value;
      //Select Box
      var e = document.getElementById("package");
      // Selected Item
      var packages = e.options[e.selectedIndex].value;
      var arrival = document.getElementById("arrival").value;
      //var interest = document.getElementById("").value;
      var tos = document.querySelector('input[name="tos"]:checked').value;
      //var checkbox = document.getElementById("").value;;
      var matches = name.match(/\d+/g);
      var re = /^\d{4}([.\/-])\d{2}\1\d{2}$/;

      if (!name) {
        alert("Name must be filled out");
      } else {
        if (matches != null) {
          alert("Name has a number in it!: " + name);
        }
      }
      if (!email) {
        alert("Email must be filled out");
      } else {
        if (validateEmail(email) == false) {
          alert("Must enter a valid email: " + email);
        }
      }
      if (!dob) {
        alert("Date of Birth must not be empty");
      } else {
        if (!dob.match(re)) {
          alert(" Dob has Invalid date format: " + dob);

        }
      }
      if (!arrival) {
        alert("Arrival Date must not be empty");
      } else {
        if (!arrival.match(re)) {
          alert(" Dob has Invalid date format: " + arrival);

        }
      }
      if (tos != "agree") {
        alert("You must agree to the Terms of Service");
      }
    }

    function validateEmail(email) {
      return /\S+@\S+\.\S+/.test(email);
    }
  </script>
</body>

</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...