【发布时间】:2020-01-20 08:49:10
【问题描述】:
从其他示例中,我尝试使用 defer 和 promise(第一次),但它不起作用。
我在我的表单上使用了不显眼的验证。有一个提交,然后我捕获那个提交事件,我得到错误计数。但是,我需要有一种方法等待错误计数功能完成,然后从那里调用一个函数来收集我的数据并发布它(使用 AJAX),或者不。
$(document).on('click', '.Save', function() {
$("#personEditForm").submit();
});
$(document).on("submit", "form", function(e) {
e.preventDefault();
// check for ModelState.Errors with unobtrusive validation
var promise = ValidateEditForm();
promise.done(function() {
alert("promiseDone");
});
ValidateEditForm();
return false;
});
function ValidateEditForm() {
var $errors = $('#personEditForm').find(".field-validation-error span");
var errorCnt = 0;
$errors.each(function() {
errorCnt++;
});
if (errorCnt <= 0) {
PostToServer();
}
}
谢谢
【问题讨论】:
-
这里不需要
defer或done,因为获取计数的each循环不是异步的。话虽如此,您根本不需要循环:var errorCnt = $('#personEditForm .field-validation-error span").length将起作用 -
另外请注意,如果
.Save元素是表单中的type="submit"按钮(因为它应该是出于HTML 验证和可访问性的原因),那么您不需要第一个click处理程序完全没有。 -
提交按钮不是提交类型,因为必须进行验证,然后如果有效,我会创建一大堆字符串化的序列化对象来回发..但它似乎没有击中 $(document ).on("submit, "form",...函数。(我在里面放了一个alert来检查)
-
The submit button is not of type submit as validation has to occur验证应该由提交事件触发,所以这没有多大意义。 -
我使用 $("#personEditForm").submit(); ..所以我猜同样的事情?或不?谢谢