如何在jQuery中验证表单?

时间:2018-10-03 10:45:08

标签: javascript jquery ajax

我想使用jQuery或Javascript验证我的数据并将其发送到服务器,但是为什么不对它们进行验证?

$(document).ready(function() {
  var name = $('#signup-name').val();
  var email = $('#signup-email').val();
  var password = $('#signup-password').val();
  var email_regex = new RegExp(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i);
  var pass_regex = new RegExp(/^(?=.[0-9])(?=.[!@#$%^&])[a-zA-Z0-9!@#$%^&]{7,15}$/);

  $('#signup-form').on('submit', function(e) {
    e.preventDefault();

    if (validate()) {
      $.ajax({
        type: 'post',
        url: 'signup',
        data: {
          email: email,
          password: password,
          name: name
        },
      });
    } else {
      return false;
    };
  });

  function validate() {
    // name cheak here
    if (name.length == "") {
      $('.nameerror').html("Name field required !");
      return false;
    } else if (name.length = < 3) {
      $('.nameerror').html("Name Should be greater than 3");
      return false;
    };
    // email cheak here

    if (email.length == "") {
      $('.emailerror').html("Email field required !");
      return false;
    } else if (!email_regex.test(email)) {
      $('.emailerror').html("Please enter correct email.");
      return false;
    };

    // password cheak here
    if (password.length == "") {
      $('.passerror').html("password field required !");
      return false;
    } else if (!pass_regex.test(password)) {#
      ('.passerror').html("Minimum eight characters, at least one letter and one number:");
      return false;
    };
  };
});

2 个答案:

答案 0 :(得分:0)

我认为问题在于,尽管validate函数确实可以访问变量name等,但是这些变量仅在文档准备就绪时才设置一次,并且从未更新过。在调用submit之前,应在validate事件的事件处理程序中设置变量的值。

答案 1 :(得分:-2)

有两个主要问题,您只是没有将参数传递给validate函数。我已经使用传递给函数的参数更新了您的代码。

此外,对于任何函数,您都不会返回true,因此不会返回任何结果。另外,您的if语句也会分裂,并且会相互矛盾。

我已更正了这些问题,希望这可以解决!

{{1}}