Как предотвратить отправку формы во время ожидания ответа ajax в drupal 7 - PullRequest
1 голос
/ 17 декабря 2011

Привет! Я хотел использовать Ajax в раскрывающемся списке, используя Drupal form API.проблема в том, что я хочу запретить пользователю отправлять форму до того, как ответ Ajax с сервера вернется.как можно отключить кнопку отправки или предотвратить любые другие действия пользователя, когда состояние списка выбора изменяется и сервер отвечает на запрос.кроме того, я использую drupal 7 с простой формой, которая была прикреплена к списку выбора ajax

Ответы [ 5 ]

5 голосов
/ 20 ноября 2012

Ajax в Drupal имеет открытый метод .ajaxStart

. Вы можете сделать

jQuery('#form_id').ajaxStart(function(){  //Here you prevent shit } );

, а также есть метод с именем .ajaxSuccess для действия завершения

.
0 голосов
/ 03 мая 2014

вот мой взгляд на это

$(document).ajaxComplete(function(){
            // the code to be fired after the AJAX is completed
            $('#edit-submit').removeAttr("disabled");
        });

$(document).ajaxStart(function(){
    event.preventDefault();
    $("#edit-submit").attr("disabled", "disabled");
    } );
0 голосов
/ 26 декабря 2011

Это просто хитрость, которую вы должны использовать, чтобы предотвратить отправку во время загрузки ajax.Во время загрузки ajax просто отключил кнопку отправки и включил ее в случае успеха.Например: предположим, что идентификатор кнопки отправки: submit_button, тогда код

$("#submit_button").attr("disabled", "disabled");

$.ajax({
  url: 'html-data/demo.html',
  success: function(data) {
    $('#resultDiv').html(data);
    $('#submit_button').removeAttr("disabled");
  }
});

выше находится в jquery, и он будет работать в Drupal.Проверьте это.

0 голосов
/ 26 декабря 2011

Установите глобальный флаг

var flag = true;

Затем в вашем AJAX перед вашим постом установите флаг в значение false

flag = false;

В рамках функции успеха

flag = true;

А потом на твоих кнопках отправки

onclick="return(if(flag));"
0 голосов
/ 25 декабря 2011

jQuery позволяет запускать код после завершения вызова AJAX. Вы можете отключить свои элементы при изменении поля со списком, а затем включить все на success. Вот пример, который я извлек из jQuery.ajax () Документов .

$.ajax({
  url: 'ajax/test.html',
  success: function(data) {
    $('.result').html(data);
    alert('Load was performed.');
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...