我在提交表单时运行了以下缩写的验证码。为我的表单设置了不显眼的验证。
(function () {
"use strict";
$("#feedbackForm").submit(function () {
var t = $(this).serialize();
var val = $(this).validate();
console.log(val.errorList.length);
return false;
});
})();
当我在Chrome中遇到断点时,我看到以下行为:
您可以从控制台看到,当代码最初执行时,它在验证的错误列表中识别出0个错误,但是当我通过断点暂停执行时,它会识别验证错误列表中的4个错误。此外,在第一次之后,在运行时正确计算了正确的错误数。
我无法在jsfiddle上重现此问题,因此必须有其他事情发生。
我还必须注意,在提交处理程序中使用setTimeout()
每次都会在第二次获得正确的结果,但这似乎只能证实mattytommo在他的回答中提到了什么。
答案 0 :(得分:3)
您可以使用同步validate
检查代替invalidHandler
。那样你知道它已经完成了。
它可能在您的小提琴中起作用的原因可能是巧合,因为它更快地验证表单,但实际执行速度较慢。
尝试这样的事情:
$("#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;
});
答案 1 :(得分:3)
最终我不确定为什么手动测量错误的数量不起作用,但最后,我真正想要做的就是验证表单并根据其状态执行某些操作,并实现这一点,Darin迪米特洛夫的建议有效:
How to check that the unobtrusive validations has been validated in jquery function?
我确信我已经尝试了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);
小提琴在原始案例中起作用,因此无需更新它。