聽起來像一個簡單的問題。我已經添加了一點jQuery的魔力:如何禁用Drupal表單提交按鈕以防止雙擊提交?
$("#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認爲該表單尚未提交。
我在Prevent double submission of forms in jQuery看到過這個問題,但擔心這看起來像是一個非常冒險的修復,應該有更好的方法。
我還添加了一個答案,你與(我認爲)一個不太冒險的解決方案鏈接的問題。 – 2010-12-17 18:50:01
由於點擊按鈕被禁用,可能不會被調用。下面我的解決方案使用1ms的setTimeout來解決這個問題。 – Nick 2013-04-22 10:53:46