簡単な質問のようです。私は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に質問を見ましたが、これは本当にハックリな修正のように思えますし、より良い方法があるはずです。
私はあなたがリンクしている質問に答えを加えました。 –
クリック時にボタンが無効になっているために呼び出されない可能性があります。私の解決策は、これを回避するために1ミリ秒でsetTimeoutを使用します。 – Nick