我一直在研究这几个小时,并且在我的智慧结束时。我在同一页面上有两个表单,两个表单都使用jQuery验证在提交之前确认有效数据。
包括以下代码。
出于某种原因,第一种表格(注册表格)正在验证,因为我正在输入数据。所以看起来它正在触发keyup / blur事件,但是当我点击提交按钮时它没有正常触发。正如您可以清楚地看到的那样,它允许使用空的OR无效数据提交表单。
右侧的登录表单。有用!但我需要点击提交按钮两次才能实际提交表单。
这里充满了头发。请有人能帮忙解决这个问题吗?
根据要求在此处添加代码。首先,注册验证人:
<script type="text/javascript">
$(document).ready(function() {
$.validator.addMethod("PASSWORD",function(value,element){
return this.optional(element) || /^(?=.*\d)(?=.*[a-zA-Z]).{5,}$/i.test(value);
},"Your password must be at least 5 characters long. Please include 1 or more numbers.");
$.validator.addMethod("lettersnumbers", function(value,element) {
return this.optional(element) || /^[a-zA-Z0-9]+$/i.test(value);
}, "Username can only contain letters and numbers. No spaces are allowed.");
$.validator.addMethod("BIRTH",function(value,element){
var age = 18;
switch($('#Province option:selected').val())
{
case "NB":
case "BC":
case "NL":
case "NS":
case "NY":
case "YT":
case "NU":
case "AL":
case "DE":
case "NE":
case "NV":
case "OH":
case "TN":
case "UT":
case "VA":
case "WI":
age = 19;
break;
case "MS":
age = 21;
break;
}
if (new Date().getFullYear() - year <= age)
{
return false;
}
return true;
},"In order to be eligible to Register, you must have reached the age of majority in your Province, Territory, or County of residence.");
var validator = $("#signupForm").validate({
rules: {
Captcha: {
required: true,
remote: {
url: "/js/validate_captcha.php",
type: "post",
data: {
action: function () {
return "checkcaptcha";
},
username: function() {
var Captcha = $("#Captcha").val();
return Captcha;
}
}
}
},
Password: "required PASSWORD",
PasswordConfirm: {
required: true,
minlength: 5,
equalTo: "#Password"
},
Username: {
required: true,
lettersnumbers: true,
maxlength: 18,
remote: {
url: "/js/validate_username.php",
type: "post",
data: {
action: function () {
return "checkusername";
},
username: function() {
var Username = $("#Username").val();
return Username;
}
}
}
},
Country: "required",
FirstName: "required",
LastName: "required",
Email: {
required: true,
remote: {
url: "/js/validate_email.php",
type: "post",
data: {
action: function () {
return "checkemail";
},
username: function() {
var Email = $("#Email").val();
return Email;
}
}
},
email: true
},
EmailConfirm: {
required: true,
email: true,
equalTo: "#Email"
},
BirthDate: {
required: true,
BIRTH: true
},
Agreement: "required",
AgeCheck: "required",
},
messages: {
captcha: "CAPTCHA response is required" ,
Agreement: "You must agree by checking the box" ,
AgeCheck: "You must agree by checking the box" ,
EmailConfirm: "Email Addresses do not Match",
lettersnumbers: "Username can only contain letters and numbers. No spaces allowed.",
noSpace: "Username cannot have spaces",
PasswordConfirm: "Please re-enter the same password as above",
Username:{
remote: "This username is already taken. Try another.",
maxlength: "Username may not be longer than 18 characters."
},
Captcha:{
remote: "You have entered an incorrect CAPTCHA response."
},
Email:{
remote: "This e-mail is already taken. Try another."
},
Password: {
required: "Please provide a password",
minlength: "Your password must be at least 5 characters long. Please include 1 or more numbers." },
required: "Required Field" ,
},
});
});
</script>
现在,登录验证器:
<script type="text/javascript">
$(document).ready(function() {
var loginvalidator = $("#form_login").validate({
rules: {
LoginUser: {
required: true,
remote: {
url: "/js/validate_login_username.php",
type: "post",
data: {
action: function () {
return "checkusername";
},
username: function() {
var Email = $("#LoginUser").val();
return Email;
}
}
}
},
LoginPassword: "required"
},
messages: {
LoginUser: {
required: "Required Field",
remote: "The username or email entered was not found. Please note, your username must contain only letters and numbers, and never any spaces. Try logging in with your email address instead." },
LoginPassword: {
required: "Required Field",
remote: "Password is incorrect. Please try again." },
},
});
});
</script>
答案 0 :(得分:0)
[以下答案已根据评论进行了编辑]
因为没有特别错误从代码中跳出来:
尝试在每个验证器中启用调试选项{debug:true},以便向控制台输出一些输出以发现问题。
您没有明确要验证哪些事件,请考虑将{onkeydown:false,onfocusout:false,onclick:false}添加到选项哈希中,以便将valiadation限制为仅提交事件
在关闭制表符后,规则哈希中还有一些不必要的尾随逗号。 perhaaps不足以导致错误,但当我遇到意外行为时,我总是想要清除这样的事情。 [注意:@Sparky,这只是旧版本IE中的一个问题。]