Javascript 如何在jQuery中验证表单?

Javascript 如何在jQuery中验证表单?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我想用jQuery或Javascript验证我的数据并将它们发送到服务器,但为什么不验证它们 $(文档).ready(函数(){ var name=$('#注册名').val(); var email=$(“#注册电子邮件”).val(); var password=$('#注册密码').val(); var email_regex=新的RegExp(/^[a-zA-Z0-9.\u-]+@[a-zA-Z0-9.-]+\[a-zA-Z]{2,4}$/i); var pass_regex=new

我想用jQuery或Javascript验证我的数据并将它们发送到服务器,但为什么不验证它们

$(文档).ready(函数(){
var name=$('#注册名').val();
var email=$(“#注册电子邮件”).val();
var password=$('#注册密码').val();
var email_regex=新的RegExp(/^[a-zA-Z0-9.\u-]+@[a-zA-Z0-9.-]+\[a-zA-Z]{2,4}$/i);
var pass_regex=new RegExp(/^(?=[0-9])(?=[!@$%^&])[a-zA-Z0-9!@$%^&]{7,15}$/);
$(“#注册表格”)。在('submit',函数(e){
e、 预防默认值();
if(validate()){
$.ajax({
键入:“post”,
url:'注册',
数据:{
电邮:电邮,,
密码:密码,
姓名:姓名
},
});
}否则{
返回false;
};
});
函数验证(){
//我叫切克
如果(name.length==“”){
$('.nameerror').html(“需要名称字段!”);
返回false;
}else if(name.length=<3){
$('.nameerror').html(“名称应大于3”);
返回false;
};
//在这里给cheak发电子邮件
如果(email.length==“”){
$('.emailerror').html(“需要电子邮件字段!”);
返回false;
}否则,如果(!email_regex.test(email)){
$('.emailerror').html(“请输入正确的电子邮件”);
返回false;
};
//密码在这里
如果(password.length==“”){
$('.passeror').html(“需要密码字段!”);
返回false;
}如果(!通过正则表达式测试(密码)){#
('.passeror').html(“至少八个字符,至少一个字母和一个数字:”);
返回false;
};
};

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

此外,您从未为任何函数返回true,因此不会返回任何内容。此外,您的if语句被拆分,并且将相互矛盾

我已经纠正了这些问题,希望这能起作用

$(document).ready(function() { 
  $('#signup-form').on('submit', function(e) {
  var name = $('#signup-name').val();
  var email = $('#signup-email').val();
  var password = $('#signup-password').val();
    e.preventDefault();
    if (validate(name, email, password)) {

      $.ajax({
        type: 'post',
        url: 'signup',
        data: {
          email: email,
          password: password,
          name: name
        },
      });

    } else {
      return false;
    };
  });
});


function validate(name, email, password) {
  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}$/);
  // name cheak here
  if (name.length == 0) {
    $('.nameerror').html("Name field required !");
    return false;
  } else if (name.length <= 3) {
    $('.nameerror').html("Name Should be greater than 3");
    return false;
  } else if (email.length == 0) { //Check Email
    $('.emailerror').html("Email field required !");
    return false;
  } else if (!email_regex.test(email)) {
    $('.emailerror').html("Please enter correct email.");
    return false;
  } else if (password.length == 0) { // password cheak here
    $('.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;
  } else {
    return true;
  }

};
$(文档).ready(函数(){
$(“#注册表格”)。在('submit',函数(e){
var name=$('#注册名').val();
var email=$(“#注册电子邮件”).val();
var password=$('#注册密码').val();
e、 预防默认值();
如果(验证(姓名、电子邮件、密码)){
$.ajax({
键入:“post”,
url:'注册',
数据:{
电邮:电邮,,
密码:密码,
姓名:姓名
},
});
}否则{
返回false;
};
});
});
功能验证(名称、电子邮件、密码){
var email_regex=新的RegExp(/^[a-zA-Z0-9.\u-]+@[a-zA-Z0-9.-]+\[a-zA-Z]{2,4}$/i);
var pass_regex=new RegExp(/^(?=[0-9])(?=[!@$%^&])[a-zA-Z0-9!@$%^&]{7,15}$/);
//我叫切克
如果(name.length==0){
$('.nameerror').html(“需要名称字段!”);
返回false;

}否则如果(name.length我认为问题在于,尽管
validate
函数确实可以访问变量
name
等,但这些变量在文档第一次准备好时只设置一次,从未更新过。变量的值应在
submit
事件的事件处理程序中设置,然后再
vali调用date

控制台中有错误消息吗?我得到一个语法错误,因为
if(name.length=<3)
,当然应该是
if(name.length函数可以访问这些变量,因为它们在其全局范围内。请举例检查。@Cid这些变量不在全局范围内,它们在JQuery onload函数内。这仍然在函数的全局范围内。请检查此项。我认为称之为“全局范围”是不正确的-但是是的,变量可以通过
验证
访问。问题不在于作用域,而在于变量在页面第一次加载时保存的值(可能是空的),而不是在提交之前输入表单的值。即使在
$(document).ready(function(){}之外声明
当函数在其中时。它仍然可用。