Во-первых, обратите внимание, что если элемент .Save
представляет собой кнопку type="submit"
в вашей форме (как это должно быть в целях проверки HTML и доступности), то вам вообще не нужен первый обработчик click
.
Что касается проблемы, вам вообще не нужно использовать defer
или done
здесь, так как в вашей логике нет ничего асинхронного.Таким образом, это будет работать нормально:
$(document).on("submit", "form", function(e) {
e.preventDefault();
var isValid = ValidateEditForm();
if (isValid) {
PostToServer();
} else {
console.log('Form was invalid. Tell user...');
}
});
function ValidateEditForm() {
var errorCnt = $('#personEditForm .field-validation-error span').length;
return errorCnt = 0;
}
Обратите внимание на использование одного объекта jQuery, выбирающего все элементы error span
и получающего свойство length
для нахождения счетчика.Это заменяет необходимость в цикле.