【问题标题】:programmatic date validation returning async? (jquery formvalidator)程序化日期验证返回异步? (jquery formvalidator)
【发布时间】:2018-05-16 18:43:41
【问题描述】:

我有一个表单,其中包含一个由 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

【问题讨论】:

    标签: javascript jquery jquery-form-validator


    【解决方案1】:

    如果您将一个验证嵌套在另一个的回调中,然后将发布请求嵌套在内部验证回调中,会发生什么情况,如下所示:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-20
      • 2021-11-26
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多