xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Запретить установку ajax-кнопке атрибута disabled при клике

Опубликовано в

Друпал при клике на ajax кнопку устанавливает ей атрибут disabled для запрета повторной отправки формы до того, как придёт ответ. Чтобы отключить такое поведение и разрешить многократное нажатие ajax-кнопки, нужно во-первых, подключить js файл со следующим кодом:

(function ($) {
  var originalBeforeSendCallback = Drupal.ajax.prototype.beforeSend;
  Drupal.ajax.prototype.beforeSend = function(xmlhttprequest, options) {
    originalBeforeSendCallback.apply(this, arguments);
 
    if ('disabled' in this && !this.disabled) {
      this.ajaxing = false;
      $(this.element).removeClass('progress-disabled').attr('disabled', false);
    }
  }
})(jQuery);

Во-вторых, в свойстве #ajax нужной кнопки добавить '#disabled' => FALSE:

$form['submit'] = array(
  ...
  '#type' => 'submit',
  '#ajax' => array(
    ...
    'disabled' => FALSE,
  ),
);

Profit.

Этим же способом можно запретить дизаблить textfield-ы при keyup:

$form['textfield'] = array(
  ...
  '#type' => 'textfield',
  '#ajax' => array(
    ...
    'event' => 'keyup',
    'disabled' => FALSE,
  ),
);

Пользоваться стоит крайне аккуратно, особенно с динамическими формами, так как могут вылезти проблемы связанные с кэшированием ajax форм.

Ну а ещё это пример как подменять системные функции в Drupal.ajax и расширять #ajax своими свойствами.

Написанное актуально для Drupal 7
Похожие записи

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании