Javascript表单验证未成功

Javascript Form Validation Not Successful

本文关键字:未成功 验证 表单 Javascript      更新时间:2023-09-26

在一个简单的HTML表单上练习我的Javascript。在一个框中输入密码,在第二个框中再次输入以确认。密码应包含6个字符(包括1个数字),并且不能有空格。如果密码符合条件并且匹配,则会弹出一条警告消息。

我大部分时间都在那里,因为如果不符合标准,就会弹出错误消息,但我无法提醒"成功!"我在很多方面都在玩弄if语句,我不确定我遗漏了什么。有什么建议吗?

Javascript:

window.onload = function() {                
            document.getElementById('submit').addEventListener('click', validateInput);
        }
        var userPass = document.getElementById('password').value;
        var confirmPass = document.getElementById('confirm_password').value;
        function validatePassword() {
            var userPass = document.getElementById('password').value;
            if (userPass.length == 0) { // Nothing was entered
                document.getElementById('password_error').innerHTML = 'Please enter a password';
            } else if (userPass.length < 6) { // Less than 6 chars 
                document.getElementById('password_error').innerHTML = 'Your password must be at least 6 characters in length'; 
            } else if (userPass.match(/'s/)) { // contains a space
                document.getElementById('password_error').innerHTML = 'Your password cannot contain spaces';
            } else if (!userPass.match(/'d/)) { // Does not contain a number
                document.getElementById('password_error').innerHTML = 'Your password must contain a number';
            } else if (userPass !== confirmPass) {
                document.getElementById('confirm_error').innerHTML = 'Passwords do not match. Please check again.';             
            } else {
                document.getElementById('password_error').innerHTML = "";
                document.getElementById('confirm_error').innerHTML = "";
                alert("Success!");  
                clearFields();
            }
        }
        function validateConfirm() {
            function clearFields (){
                document.getElementById('password').value=null;
                document.getElementById('confirm_password').value=null;
            }
            if (confirmPass.length == 0) {
                document.getElementById('confirm_error').innerHTML = "Please confirm password to proceed";
            } else if (confirmPass.length < 6) {
                document.getElementById('confirm_error').innerHTML = "Your password must be at least 6 characters in length";
            } else if (userPass !== confirmPass) {
                document.getElementById('confirm_error').innerHTML = 'Passwords do not match. Please check again.';     
            } else {
                document.getElementById('password_error').innerHTML = "";
                document.getElementById('confirm_error').innerHTML = "";
                alert("Success!");  
                clearFields();
            }              
        }  

        function validateInput() {
            validatePassword();
            validateConfirm();
        }

形式:

   <form>
   <fieldset>
        <legend>CONFIRM PASSWORD</legend>
        <label for="name">Password: </label>
        <input type="text" id="password" size="10" />
        <p id="password_error" class="error"></p>
        <label for="name">Confirm Password: </label>
        <input type="text" id="confirm_password" size="10" />
        <p id="confirm_error" class="error"></p>
        <button id="submit">Submit</button>
    </fieldset>
    </form>

我在您的代码中发现了两个错误

  1. 在函数validatePassword()之外设置clearFields()函数
  2. var confirmPass进入函数内部或从调用函数传递

window.onload = function () {
    document.getElementById('submit').addEventListener('click', validateInput);
}
function validatePassword() {
    var userPass = document.getElementById('password').value;
    var confirmPass = document.getElementById('confirm_password').value;
    if (userPass.length == 0) { // Nothing was entered
        document.getElementById('password_error').innerHTML = 'Please enter a password';
    } else if (userPass.length < 6) { // Less than 6 chars 
        document.getElementById('password_error').innerHTML = 'Your password must be at least 6 characters in length';
    } else if (userPass.match(/'s/)) { // contains a space
        document.getElementById('password_error').innerHTML = 'Your password cannot contain spaces';
    } else if (!userPass.match(/'d/)) { // Does not contain a number
        document.getElementById('password_error').innerHTML = 'Your password must contain a number';
    } else if (userPass !== confirmPass) {
        document.getElementById('confirm_error').innerHTML = 'Passwords do not match. Please check again.';
    } else {
        document.getElementById('password_error').innerHTML = "";
        document.getElementById('confirm_error').innerHTML = "";
        alert("Success!");
        clearFields();
    }
}
function clearFields() {
    document.getElementById('password').value = null;
    document.getElementById('confirm_password').value = null;
}
function validateConfirm() {
    var userPass = document.getElementById('password').value;
    var confirmPass = document.getElementById('confirm_password').value;
    if (confirmPass.length == 0) {
        document.getElementById('confirm_error').innerHTML = "Please confirm password to proceed";
    } else if (confirmPass.length < 6) {
        document.getElementById('confirm_error').innerHTML = "Your password must be at least 6 characters in length";
    } else if (userPass !== confirmPass) {
        document.getElementById('confirm_error').innerHTML = 'Passwords do not match. Please check again.';
    } else {
        document.getElementById('password_error').innerHTML = "";
        document.getElementById('confirm_error').innerHTML = "";
        alert("Success!");
        clearFields();
    }
}
function validateInput() {
    validatePassword();
    validateConfirm();
}
 <form>
   <fieldset>
        <legend>CONFIRM PASSWORD</legend>
        <label for="name">Password: </label>
        <input type="text" id="password" size="10" />
        <p id="password_error" class="error"></p>
        <label for="name">Confirm Password: </label>
        <input type="text" id="confirm_password" size="10" />
        <p id="confirm_error" class="error"></p>
        <button id="submit">Submit</button>
    </fieldset>
    </form>

存在多个问题

  1. 函数clearFields()仅在validateConfirm内部可用
  2. 您在页面加载时只读取确认输入的值一次,您需要在validate方法中读取新值,否则它将始终为空字符串
  3. 由于您正在验证密码字段中的策略,因此无需再次检查确认字段,因为您正在检查确认字段和密码字段是否相同

window.onload = function() {
  document.getElementById('submit').addEventListener('click', validateInput);
}
function validatePassword() {
  var userPass = document.getElementById('password').value;
  var confirmPass = document.getElementById('confirm_password').value;
  if (userPass.length == 0) { // Nothing was entered
    document.getElementById('password_error').innerHTML = 'Please enter a password';
  } else if (userPass.length < 6) { // Less than 6 chars 
    document.getElementById('password_error').innerHTML = 'Your password must be at least 6 characters in length';
  } else if (userPass.match(/'s/)) { // contains a space
    document.getElementById('password_error').innerHTML = 'Your password cannot contain spaces';
  } else if (!userPass.match(/'d/)) { // Does not contain a number
    document.getElementById('password_error').innerHTML = 'Your password must contain a number';
  } else if (userPass !== confirmPass) {
    document.getElementById('password_error').innerHTML = "";
    document.getElementById('confirm_error').innerHTML = 'Passwords do not match. Please check again.';
  } else {
    document.getElementById('password_error').innerHTML = "";
    document.getElementById('confirm_error').innerHTML = "";
    alert("Success!");
    clearFields();
    return true;
  }
  return false;
}
function clearFields() {
  document.getElementById('password').value = '';
  document.getElementById('confirm_password').value = '';
}
function validateInput() {
  return validatePassword();
}
<fieldset>
  <legend>CONFIRM PASSWORD</legend>
  <label for="name">Password:</label>
  <input type="text" id="password" size="10" />
  <p id="password_error" class="error"></p>
  <label for="name">Confirm Password:</label>
  <input type="text" id="confirm_password" size="10" />
  <p id="confirm_error" class="error"></p>
  <button id="submit">Submit</button>
</fieldset>