首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一个好的方法来处理不引人注目的验证看似异步的行为?

是否有一个好的方法来处理不引人注目的验证看似异步的行为?
EN

Stack Overflow用户
提问于 2013-03-20 21:11:03
回答 2查看 394关注 0票数 2

在提交表单时,我有以下简化的验证代码。为我的表单设置了不显着的验证。

代码语言:javascript
复制
(function () {
    "use strict";

    $("#feedbackForm").submit(function () {
        var t = $(this).serialize();
        var val = $(this).validate();
        console.log(val.errorList.length);
        return false;
    });
})();

当我在Chrome中碰到一个断点时,我会看到以下行为:

您可以从控制台中看到,当代码最初执行时,它在验证的错误列表中识别出0错误,但当我通过断点暂停执行时,它会识别验证错误列表中的4个错误。此外,在第一次运行时,正确的错误数将被正确计算出来。

  • 这怎麽可能?
  • 如何在运行时获得正确的错误数?

编辑1:

我不能用小提琴复制这个问题,所以肯定还有别的事情要发生。

小提琴

编辑2:

我还必须指出,每次在提交处理程序中使用setTimeout()都会获得正确的结果,但这似乎只是证实了mattytommo在他的回答中提到的内容。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-21 17:27:25

最终,我不知道为什么手动测量错误数不起作用,但最后,我真正想要做的就是验证表单并根据其状态做一些事情,为了实现这一点,达林·季米特洛夫的建议奏效了:

如何检查jquery函数中是否已经验证了不引人注目的验证?

我认为我确实尝试过valid()方法,但它没有成功,但我想我没有尝试过,而且看起来这个不显眼的插件会及时支持这个方法,而不是其他两个。

工作代码:

代码语言:javascript
复制
(function ($) {
    "use strict";
    
    $("#feedbackForm").on("submit", function () {
        var t = $(this).serialize(),
            val;

        val = $(this).validate();
        console.log(val.numberOfInvalids());
        console.log(val.errorList.length);
        console.log($(this).valid());       
        
        return false;
    });
})(jQuery);

工作小提琴

小提琴在原来的情况下起作用了,所以没有必要更新它。

票数 3
EN

Stack Overflow用户

发布于 2013-03-21 16:09:08

而不是validate,您可以使用同步invalidHandler检查。这样你就知道它已经完成了。

它在Fiddle中工作的原因可能是巧合的,因为它更快地验证表单,但在实际实现中更慢。

试着做这样的事情:

代码语言:javascript
复制
$("#feedbackForm").submit(function () {
    var t = $(this).serialize();
    $(this).validate({
        invalidHandler: function(event, validator) {
            var errors = validator.numberOfInvalids();
            if (errors) {
                if (validator.errorList.length > 0) {
                    for (x=0;x<validator.errorList.length;x++) {
                        console.log("\n\u25CF " + validator.errorList[x].message);
                    }
                }
            }
        }
    });

   $(this).validate();

    return false;
});
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15534790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档