JQuery. Submit Return ложь не всегда работает - PullRequest
1 голос
/ 03 марта 2010

Ранее я задавал связанный вопрос , но теперь на вопрос, на который мне нужно ответить, похоже, произошла некоторая особая касательная, поэтому я подумал, что было бы лучше задать новый вопрос.

Я пытаюсь предотвратить отправку формы, пока все вызовы ajax на странице не будут успешно возвращены.

У меня есть простой тест для этого (добавьте 1 к счетчику при запуске вызова, вычтите 1 в случае успеха).

Я верю, что должен уметь:

// can we submit yet?
  $('#checkoutform').submit(function() {
    if (ajaxcallcounter == 0) {
      return true;
    }
    return false;
  });

для предотвращения отправки формы до тех пор, пока счетчик не достигнет нуля (все вызовы завершены), но по некоторым причинам это не кажется эффективным на 100%.

Я не знаю, красная ли это сельдь, но во всех отчетах клиентов, которым удалось проверить до завершения звонков, использовался Mac Safari (хотя это может быть просто совпадением)

Вы можете увидеть код в действии здесь - попробуйте изменить страну доставки, чтобы отключить некоторые вызовы ajax. Кнопка отправки в правом нижнем углу должна быть отключена, если счетчик> 0.

1 Ответ

1 голос
/ 03 марта 2010

Определить переменную ajaxcallcounter = 0; вне вашей функции. Поместите его в верхнюю часть файла JavaScript, чтобы сделать его глобальной переменной .

В общем, вы можете убедиться, что имеете полный контроль над событием, остановив его распространение. У каждого обработчика события есть неявный параметр, обычно определяемый как «e» или «событие», и вы можете вызвать на этом функцию warnDefault (), например:

$('#checkoutform').submit(function(e) {
    e.preventDefault();
    if (ajaxcallcounter == 0) {
      return true;
    }
    return false;
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...