在提交表单时,我有以下简化的验证代码。为我的表单设置了不显着的验证。
(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在他的回答中提到的内容。
发布于 2013-03-21 17:27:25
最终,我不知道为什么手动测量错误数不起作用,但最后,我真正想要做的就是验证表单并根据其状态做一些事情,为了实现这一点,达林·季米特洛夫的建议奏效了:
我认为我确实尝试过valid()方法,但它没有成功,但我想我没有尝试过,而且看起来这个不显眼的插件会及时支持这个方法,而不是其他两个。
工作代码:
(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);

工作小提琴
小提琴在原来的情况下起作用了,所以没有必要更新它。
发布于 2013-03-21 16:09:08
而不是validate,您可以使用同步invalidHandler检查。这样你就知道它已经完成了。
它在Fiddle中工作的原因可能是巧合的,因为它更快地验证表单,但在实际实现中更慢。
试着做这样的事情:
$("#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;
});https://stackoverflow.com/questions/15534790
复制相似问题