Звучит как простой вопрос. Я добавил немного магии 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 , но меня беспокоит, что это кажется действительно хакерским исправлением, и должен быть способ лучше.