【问题标题】:Javascript form validation is not working in form validationJavascript表单验证在表单验证中不起作用
【发布时间】:2021-08-28 01:28:34
【问题描述】:

我正在处理表单验证,这里表单验证不起作用,这可能是问题所在。谁能推荐我。

class Registrationform {
constructor() {
    this.initializeElements();
}
initializeElements () {
    this.demoRegisterWrap = $('.demoRegister-wrap');
    this.registrationForm = $('.registration-form');
    this.username = '#username';
    this.useremail= '#useremail';
    this.userpassword = '#userpassword';
    this.formValidation();
}
formValidation() {
    let submitBtn = this.demoRegisterWrap.find('.submitBtn');
    submitBtn.on('click', e => {
        alert('test');
        e.preventDefault();
        alert('test');
        var text = "";
        if (UserName(this.username)) {
        }
        if (UserEmail(this.useremail)) {
        }
        if (UserPassword(this.userpassword)) {
        }
        return false;
    });
    /*Name input validation*/
    function UserName(username) {
        var message = document.getElementsByClassName("error-message");
        var letters = /^[A-Za-z]+$/;
        if ( username =="" || username.match(letters)) {
        text="";
        message[0].innerHTML = text;
        return true;
        }
        
        else {
        text="Name should contain only letters";
        message[0].innerHTML = text;
        return false;
        }
    }
    

    /*email address input validation*/
    function UserEmail(useremail) {
        var message = document.getElementsByClassName("error-message");
        var mailformat = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/; 
        var atpos = useremail.indexOf("@");
        var dotpos = useremail.lastIndexOf(".");
                
        if ( useremail =="" || useremail.match(mailformat) || atpos > 1 && ( dotpos - atpos > 2 )) {
        text="";
        message[1].innerHTML = text;
        return true;
        }
            
        else {
        text="Wrong email format";
        message[1].innerHTML = text;
        return false;
        }
    }
    
    /*validate password*/
    function UserPassword(userpassword) {
        var message = document.getElementsByClassName("error-message");
        var illegalChars = /[\W_]/; 
        if (illegalChars.test(userpassword)) { 
        text="Password contains illegal characters";
        message[2].innerHTML = text;
        return false;
        }
        else if ( (userpassword.search(/[0-9]+/)==-1) ) {
        text="Password should contain at least one number";
        message[2].innerHTML = text;
        return false;
        }
        else {
        text="";
        message[2].innerHTML = text;
        return true;
        }
    }
}

}

new Registrationform();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="demoRegister-wrap">
<form class="registration-form" novalidate>
  <fieldset>
    <br/>
    <input type="text" id="username" name="name" placeholder="Name" />
    <p class="error-message"></p>
    <input type="text" id="useremail" placeholder="Email" />
    <p class="error-message"></p>
    <input type="password" id="userpassword" pattern=".{8,}" title="8 characters minimum" />
    <p class="error-message"></p>
    <label for="submit"></label>
    <input class="submitBtn" type="submit" value="submit" name="submit" />
  </fieldset>
</form>
   </div>

【问题讨论】:

  • 你应该使用onsubmit事件form
  • @Pawan Bishoni onsubmit 如果我在表单中使用了onClick='func();',则会显示其他一些错误。
  • @ray hatfield 脚本加载正常,如果我在 onclick 之外添加警报,它即将到来
  • 您的输入/按钮有 2 个类声明。
  • @Husna 按照 Pawan 的建议,听起来很奇怪,提交按钮的默认操作不是提交表单,e.preventDefault() 不起作用,但它会在表单提交处理程序中.

标签: javascript html jquery


【解决方案1】:

我认为您需要删除 return false。 Here is a reference that details why. 简而言之,当返回存在时,将函数放在另一个函数中。

如果您希望 onclick 在这些函数为您提供您不想要的输出时返回 false,那么您可能希望在 HTML 中执行此操作,more like this format

不过,一般来说,我建议使用 fetch{} 方法,因为它更容易,而且您不必担心表单提交会导致重定向的空白页面。只需将这个 fetch 函数用作 on click 的函数即可。

(data) => fetch('URL to place you are already submitting your form', {
     method: 'POST', 
     body: data
});

【讨论】:

    【解决方案2】:

    您可以使用 jquery 验证表单,如下所示非常简单

    function isEmail(email) {
      return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(email);
    }
    
    function validateIt() {
      let username = document.getElementById("username").value
      let email = document.getElementById("useremail").value
      let Password = document.getElementById("userpassword").value
    
      let errorUsername = document.getElementById("errorMessageUsername")
      let errorEmail = document.getElementById("errorMessageEmail")
      let errorPassword = document.getElementById("errorMessagePassword")
    
    
      errorUsername.innerHTML = null
      errorEmail.innerHTML = null
      errorPassword.innerHTML = null
       
      let submit = document.getElementById("submitBtn")
    
    
      if (username.length < 3) {
        errorUsername.innerHTML = "please enter valid username"
        return;
        }else{
      
        }
    
      if (isEmail(email)) {
    
      } else {
        errorEmail.innerHTML = "email address badly formated"
        return;
      }
    
    
      if(Password.length < 8) {
      errorPassword.innerHTML = "Password must be more than 8 character"
      return;
      }else{
       }
    
    console.log(`username:-${username}
    email:-${email}
    Password:-${Password}`)
    
    // for sending to server using jquery : - 
    //  sendToServer(email,Password,username) // remove this line from comment
    }
    
    
    // if you wont to send it to server using using jquery (remove below code from comment): -
    
    
    // function sendToServer(email,password,username){
    //  let list = JSON.stringify({data:{email:email,password:password,username:username}});
    //  fetch("/",
    //  {method:"post", 
    //   body:list,
    //   headers: {
    //     'Content-Type': 'application/json'
    //   }})
    //  }
    
    
    
    /// at app.js using  (server) : - 
    
    
    
    // app.post("/" , (req,res) =>{
    //  let email =  req.body.data.email
    //  let password =  req.body.data.password
    //  let username =  req.body.data.username
    
    //   console.log(email+","+password+","+username) 
    //})
    <div class="demoRegister-wrap">
    
      <br>
      <input type="text" id="username" name="name" placeholder="Name" />
      <p id="errorMessageUsername" class="error-message"></p>
      <input type="text" id="useremail" placeholder="Email" />
      <p id="errorMessageEmail" class="error-message"></p>
      <input type="password" id="userpassword" pattern=".{8,}" placeholder="password" title="8 characters minimum" />
      <p id="errorMessagePassword" class="error-message"></p>
      <button onclick="validateIt()">Submit</button>
    
    </div>

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 2012-02-08
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-06
      • 1970-01-01
      相关资源
      最近更新 更多