我有一个表单,其中包含一个由 datepicker() 填充的文本字段,我试图在按钮的单击事件处理程序中以编程方式验证该表单:
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 的验证不会:当它评估它以决定是返回还是执行 $.post() 时,formValid 仍然为真。
如果我添加 console.log() 输出,我会看到在代码已经执行 $.post() 之后,expiryDate 字段的验证器正在返回。
结果,即使验证失败,数据也会通过 $.post() 提交。
我错过了什么?
以下是 console.log() 结果(数字是用于检查时间的滴答计数;真/假是指 formValid 的值):
1526495506879 initial value: true
1526495506881 after expiryDate validate: true
1526495506882 in documentName validate: true
1526495506883 after documentName validate: true
1526495506883 would post now...
1526495507084 in expiryDate validate: false
1526495507086 in expiryDate validate: false