Как отключить кнопку отправки формы Drupal, когда она нажата кнопка, чтобы предотвратить двойную отправку?

Звучит как простой вопрос. Я добавил немного магии jQuery:

$("#edit-save").click(function(event) {
  $(this).attr("disabled", "true");
});

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

Это настраиваемая форма на моем собственном пути, определенном в hook_menu:

$items['my_form'] = array(
  'title' => 'My form',
  'page callback' => 'drupal_get_form',
  'page arguments' => array('mymod_myform'),
  'type' => MENU_CALLBACK,
);

В форме у меня есть кнопка отправки и кнопка отмены:

$form['cancel'] = array(
  '#type' => 'submit',
  '#value' => t('Cancel'),
);

$form['save'] = array(
  '#type' => 'submit',
  '#value' => t('Save'),
);

и я определяю свой собственный обработчик отправки:

$form['#submit'][] = 'mymod_myform_submit';

Я поместите немного кода трассировки в функцию drupal_get_form (), чтобы прослушивать переменную $ _POST при отправке формы. Когда магия jQuery отключена, переменная $ _POST включает параметр «op»:

Array
  (
    [op] = Save
    [form_build_id] => form-6e74c87390e3fc48d0bebd2f5193315b
    [form_token] => 33db6e34c0350e33c48861a63a38d45f
    [form_id] => dh_seo_workload_item_form
  )

, но если я включу магию jQuery для отключения кнопки отправки после ее нажатия, параметр «op» больше не будет включен в $ _POST, поэтому Drupal считает, что форма не была отправлена.

I ' Я видел вопрос на Предотвращение двойной отправки форм в jQuery , но меня беспокоит, что это кажется действительно хакерским исправлением, и должен быть способ лучше.

6
задан Community 23 May 2017 в 11:50
поделиться