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