History:我之前开始这个问题这个线程 https://stackoverflow.com/questions/31966294/form-post-is-omitted-after-jquery-validation-is-completed。我花了一些时间试图让远程验证正常工作,所以我拒绝相信这就是导致我悲伤的原因。
Present:我正在使用 jQuery Validator,并且我已将 js 更新到版本 1.14.0。这个过程进展顺利。所有字段都经过检查和验证,我什至添加了一些额外的检查来帮助我识别问题:
invalidHandler
and $("#submitBTN").click()
,详述如下。
如果验证失败,这两个选项都会报告,并且该按钮还通过调用报告已通过验证$(form).valid();
我有一个远程验证,它正在验证电子邮件地址,检查它是否已在数据库中。这是工作。我使用帖子提交此请求。我应该使用替代技术吗?我这样说是因为验证后的表单帖子尚未提交。
我什至没有做到submitHandler
但如果我注释掉远程检查我就可以访问submitHandler
并处理表单操作。
我已审查过jQuery 远程验证 http://jqueryvalidation.org/remote-method/规则,但它的布局非常简单,所以我做错了什么?
这是我的 html 表单代码:
<form id="signup_form" name="signup_form" method="post" action="registration">
<h2>E-MAIL ADDRESS</h2>
<input value="<?=$uEmail?>" type="text" name="signup_email" id="signup_email" /><br />
<h2>PASSWORD</h2>
<input type="password" name="requiredpWord" id="requiredpWord"><br />
<h2>CONFIRM PASSWORD</h2>
<input type="password" name="requiredcpWord" id="requiredcpWord"><br />
<button id="submitBTN" type="submit" value="COMPLETE SIGNUP">COMPLETE SIGN UP</button>
</form>
这是我的 jQuery 验证(Note我混合使用console.log
& alert
用于调试):
$(function() {
$("#signup_form").validate({
rules: {
signup_email: {
email: true,
required: true,
remote: {
type: 'post',
url: 'registration/isEmailAvailable',
data: {
email:
function() {
// console.log(data);
return $( "#signup_email" ).val();
}
}
}
},
requiredpWord: {
required: true,
minlength: 8
},
requiredcpWord: {
equalTo: "#requiredpWord"
}
},
messages: {
signup_email: {
required: "Please provide an email",
email: "Please enter a valid email address"//,
},
requiredpWord: {
required: "Please provide a password.",
minlength: "Your password must be at least 8 characters long"
},
requiredcpWord: "Your passwords do not match."
},
invalidHandler:
function(form, validator) {
var errors = validator.numberOfInvalids();
if (errors) {
var message = errors == 1
? 'Please correct the following error:\n'
: 'Please correct the following ' + errors + ' errors.\n';
var errors = "";
if (validator.errorList.length > 0) {
for (x=0;x<validator.errorList.length;x++) {
errors += "\n\u25CF " + validator.errorList[x].message;
}
}
console.log(message + errors);
}
validator.focusInvalid();
},
//added this to see if the form would post, did not change it
submitHandler:
function(form) {
alert("form submitted");
// do other things for a valid form
form.submit();
}
});
})
这是我的按钮 js 验证:
$( "#submitBTN" ).click(function() {
alert( "Valid: " + $("#signup_form").valid() );
});
这是我的简单 php 验证脚本,在验证表单后我可以读取它:
var_dump($_POST);
启用远程部分的验证:
当我按下提交警报报告时:
Valid: true
.
控制台报告电子邮件地址的验证帖子。没有发生任何其他事情,也没有报告任何其他事情。该页面保留在表单上。
禁用/注释掉远程部分的验证:
如果我完全注释掉远程验证部分:
我查看以下警报:
Valid: true
&&form submitted
接下来是$_POST 的var_dump。这表明表单操作已完成。
任何关于如何让它发挥作用的建议将不胜感激?!
UPDATE
远程检查几乎返回以下内容:
if(!$userHandler->isEmailAvailable($email)){
echo json_encode("Email Address is already registered: ".$email);
}else{
echo false;
}
exit;
如果返回 true,则结果将变为错误消息 1。