Javascript 返回异步的编程日期验证?(jquery formvalidator)
我有一个表单,其中有一个由datepicker()填充的文本字段,我正在尝试验证按钮的单击事件处理程序中的programmaticaly:Javascript 返回异步的编程日期验证?(jquery formvalidator),javascript,jquery,jquery-form-validator,Javascript,Jquery,Jquery Form Validator,我有一个表单,其中有一个由datepicker()填充的文本字段,我正在尝试验证按钮的单击事件处理程序中的programmaticaly: var formValid = true; console.log( Date.now() + ' initial value: ' + formValid ); $('#expiryDate').validate(function(valid,elem){ if(!valid){ formValid = false; } console
var formValid = true;
console.log( Date.now() + ' initial value: ' + formValid );
$('#expiryDate').validate(function(valid,elem){
if(!valid){ formValid = false; }
console.log( Date.now() + ' in expiryDate validate: ' + formValid );
});
console.log( Date.now() + ' after expiryDate validate: ' + formValid );
$('#documentName').validate(function(valid,elem){
if(!valid){ formValid = false; }
console.log( Date.now() + ' in documentName validate: ' + formValid );
});
console.log( Date.now() + ' after documentName validate: ' + formValid );
if(!formValid){
console.log( Date.now() + ' no post...' );
$('.btn').prop('disabled' ,false );
return;
}
console.log( Date.now() + ' would post now...' );
//$.post();
documentName的验证将正确且同步地返回。但是,expiryDate的验证没有:formValid在计算它以决定是返回还是执行$.post()时仍然为true
如果我添加console.log()输出,我会看到expiryDate字段的验证器在代码执行$.post()之后返回
因此,即使验证失败,也会通过$.post()提交数据
我错过了什么
以下是console.log()结果(这些数字是用于检查计时的记号计数;true/false是指formValid的值):
如果将一个验证嵌套在另一个验证的回调中,然后将post请求嵌套在内部验证回调中,会发生什么情况,如下所示:
var formValid = true;
console.log(Date.now() + ' initial value: ' + formValid);
$('#expiryDate').validate(function (valid, elem) {
if (!valid) { formValid = false; }
console.log(Date.now() + ' in expiryDate validate: ' + formValid);
$('#documentName').validate(function (valid, elem) {
if (!valid) { formValid = false; }
console.log(Date.now() + ' in documentName validate: ' + formValid);
if (!formValid) {
console.log(Date.now() + ' no post...');
$('.btn').prop('disabled', false);
} else {
console.log(Date.now() + ' would post now...');
//$.post();
}
});
});
var formValid = true;
console.log(Date.now() + ' initial value: ' + formValid);
$('#expiryDate').validate(function (valid, elem) {
if (!valid) { formValid = false; }
console.log(Date.now() + ' in expiryDate validate: ' + formValid);
$('#documentName').validate(function (valid, elem) {
if (!valid) { formValid = false; }
console.log(Date.now() + ' in documentName validate: ' + formValid);
if (!formValid) {
console.log(Date.now() + ' no post...');
$('.btn').prop('disabled', false);
} else {
console.log(Date.now() + ' would post now...');
//$.post();
}
});
});