【问题标题】:JavaScript only validating the first fieldJavaScript 仅验证第一个字段
【发布时间】:2016-05-18 13:28:33
【问题描述】:

所以基本上我正在尝试创建一个输入框列表,每个输入框都需要在提交之前进行验证。我是 JavaScript 和 HTML 的一个非常基本的初学者,并且会感谢任何输入,因为只有第一个表单正在验证。只要 Forename 中有字母字符,它就会提交。

  <p><b> Forename: </b></p>
  <input type="text" size="32" name="frmForename" placeholder="Dylan">

  <p><b> Surname: </b></p>
  <input type="text" size="32" name="frmSurname" placeholder="Owen">

  <p><b> Gender: </b></p>
  <input type="radio" name="frmGender" value="male"> Male
  <input type="radio" name="frmGender" value="female"> Female

  <p><b> Date of Birth:</b><p>
  <input type ="text" size="32" name="frmDateOfBirth" placeholder="DD/MM/YYYY">

  <p><b> Age: </b></p> 
  <input type ="text" size="32" name="frmAge" min="12" max="150" placeholder="Enter Your Age">

  <p><b> Course: </b></p> <select name="frmCourse" id="frmCourse">
  <option value="select">Select Your Course</option>
  <option value="databases">Databases</option>
  <option value="websites">Websites</option>
  <option value="networks">Networks</option>
  </select>

  <p><input type="submit" value="Enter Details" onclick=" return checkForm(); checkForm2();">
     <input type="reset" value="Clear Form" onclick="return confirm_reset();">
     <button onclick="goBack()">Back</button> </p>
  <font size="3" color="red">All forms <u>must</u> be complete.</font> 

  <p><b> Date Registered: </b></p>
  <input type="text" size="55" id="dateReg" readonly/>


</form>

</body>

JavaScript

    <script language="javascript" type="text/javascript">
  document.bgColor="LightSteelBlue";
</script>


<script type="text/javascript">

  function checkForm(form)
  {

    //****FORENAME****
    // VALIDATE: No Characters
    if(form.frmForename.value == "") {
      alert("Error: Enter your forename.");
      form.frmForename.focus();
      return false;
    }

    // regular expression to match only alphanumeric characters and spaces
    var re = /^[A-Za-z]+$/;

    // VALIDATE: Does the entered text match the expression above?
    if(!re.test(form.frmForename.value)) {
      alert("Error: Cannot use numerical characters.");
      form.frmForename.focus();
      return false;
    }
    // validation was successful
    return true;
  }
  </script>

  <script>

    function checkForm2(form)
    //****SURNAME****
    if(form.frmSurname.value == "") {
      alert("Error: Enter your surname.");
      form.frmSurname.focus();
      return false;
    }

    // regular expression to match only alphanumeric characters and spaces
    var re = /^[A-Za-z]+$/;

    // VALIDATE: Does the entered text match the expression above?
    if(!re.test(form.frmSurname.value)) {
      alert("Error: Cannot use numerical characters.");
      form.frmSurname.focus();
     return false;
    }

    // validation was successful
    return true;
  }

</script>

<script>
function getDate() {
document.getElementById('dateReg').value= Date();
}
</script>


<script>
function confirm_reset() {
    return confirm("Are you sure?");
}
</script>

<script>
function goBack() {
  return confirm("Are you sure?");
  window.history.back();
}
</script>

<script>
if(form.frmDateOfBirth.value == "") {
      alert("Error: Date Of Birth is empty!");
      form.frmDateOfBirth.focus();
      return false;
    }

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

    if(form.frmDateOfBirth.value != '') {
      if(regs = form.frmDateOfBirth.value.match(re)) {

        if(regs[1] < 1 || regs[1] > 31) {
          alert("Invalid value for day: " + regs[1]);
          form.frmDateOfBirth.focus();
          return false;
        }

        if(regs[2] < 1 || regs[2] > 12) {
          alert("Invalid value for month: " + regs[2]);
          form.frmDateOfBirth.focus();
          return false;
        }

        if(regs[3] < 1913 || regs[3] > (new Date()).getFullYear()) {
          alert("Invalid value for Date Of Birth: " + regs[3] + " - must be between 1913 and " + (new Date()).getFullYear());
          form.frmDateOfBirth.focus();
          return false;
        }
      } else {
        alert("Invalid date format: " + form.frmDateOfBirth.value);
        form.frmDateOfBirth.focus();
        return false;
      }
    }
</script>

<script>
function validateCourse() {

 var x = document.forms["frmCourse"]["frmCourse"].value;
     if (x == "select") {
         alert("Please select a course.");
         return false;
     }
  }
</script>

【问题讨论】:

  • onclick=" return checkForm(); checkForm2();您正在返回第一个函数,而第二个函数永远不会触发,请尝试删除 return 语句。
  • 这似乎没有影响任何东西,还有其他想法吗?我尝试向每个函数添加 return true 语句无济于事。

标签: javascript forms validation xhtml


【解决方案1】:

这一行:

  onclick=" return checkForm(); checkForm2();

表示如果checkForm返回false(当form.frmForename.value == ""),那么false与return checkForm()中的return一起使用,并且点击事件被取消,所以表单不会提交。然后调用了 checkForm2(),但是此时按钮的点击已经被取消了。

此外,没有必要将每个函数分成自己的

【讨论】:

  • 是的,我看到了,但我该如何解决这个问题?我尝试将所有 JavaScript 放入一个函数中,但它不起作用。
  • 首先,(正如我提到的)不要使用内联事件处理程序(onclick=...)。使用正确的机制 element.addEventListener() 并以正确的方式取消事件 (element.preventDefault())。这样您就不必担心返回任何值以及那些阻止其他代码(您想要运行的)运行的值。
  • @ScottMarcus 你说“然后调用 checkForm2()”,但实际上它从来没有。在return checkForm(); 之后没有任何反应。
  • 实际上,是的,这是有道理的,因为 return false 正在取消 onclick 事件。不会有任何进一步的事情发生。
猜你喜欢
  • 1970-01-01
  • 2013-09-30
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-11
  • 1970-01-01
相关资源
最近更新 更多