Как использовать jquery .defer или .done при проверке формы (с ненавязчивым) до ее отправки или предотвращения отправки - PullRequest
1 голос
/ 19 сентября 2019

Из других примеров я пытался использовать defer и обещание (впервые), но это не работает.

Я использую ненавязчивую проверку в моей форме.Есть отправка, затем я перехватываю событие отправки, где я получаю счетчик ошибок.Однако там мне нужно средство ожидания, пока не завершится функция подсчета ошибок, и оттуда либо вызвать функцию, чтобы собрать мои данные и отправить их (используя 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();
  }
}

Спасибо

1 Ответ

0 голосов
/ 19 сентября 2019

Во-первых, обратите внимание, что если элемент .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 для нахождения счетчика.Это заменяет необходимость в цикле.

...