Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回异步的编程日期验证?(jquery formvalidator)_Javascript_Jquery_Jquery Form Validator - Fatal编程技术网

Javascript 返回异步的编程日期验证?(jquery formvalidator)

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

我有一个表单,其中有一个由datepicker()填充的文本字段,我正在尝试验证按钮的单击事件处理程序中的programmaticaly:

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();
        }
    });
});