Klingt wie eine einfache Frage. Ich habe ein bisschen von jQuery Magie hinzugefügt:Wie kann ich eine Drupal-Formular-Senden-Schaltfläche deaktivieren, wenn auf sie geklickt wird, um doppelte Einreichung zu verhindern?
$("#edit-save").click(function(event) {
$(this).attr("disabled", "true");
});
Sobald jedoch diese an Ort und Stelle ist, meine Form Handler einreicht nicht aufgerufen.
Dies ist eine individuelle Form auf meinem eigenen Weg in hook_menu definiert:
$items['my_form'] = array(
'title' => 'My form',
'page callback' => 'drupal_get_form',
'page arguments' => array('mymod_myform'),
'type' => MENU_CALLBACK,
);
In der Form, ich habe eine Submit-Button und eine Löschtaste:
$form['cancel'] = array(
'#type' => 'submit',
'#value' => t('Cancel'),
);
$form['save'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
und definiere ich meine eigenen einreichen Handler:
$form['#submit'][] = 'mymod_myform_submit';
ich habe ein bisschen von Tracing-Code in der drupal_get_form() Funktion zu schnuppern setzen Die Variable $ _POST, wenn das Formular gesendet wird. Wenn die jQuery Magie deaktiviert ist, schließt die $ _POST Variable einen „op“ Parameter:
Array
(
[op] = Save
[form_build_id] => form-6e74c87390e3fc48d0bebd2f5193315b
[form_token] => 33db6e34c0350e33c48861a63a38d45f
[form_id] => dh_seo_workload_item_form
)
aber wenn ich die jQuery Magie ermöglichen die Absenden-Schaltfläche zu deaktivieren, nachdem es die „op“ geklickt worden ist, Parameter ist nicht mehr im $ _POST-Array enthalten, und so denkt Drupal, dass das Formular nicht übergeben wurde.
Ich habe die Frage bei Prevent double submission of forms in jQuery gesehen, aber bin besorgt, dass dies scheint wie ein wirklich hacky Fix, und es sollte einen besseren Weg geben.
Ich fügte auch eine Antwort zu der Frage hinzu, die Sie mit (ich denke) eine weniger hacky Lösung verknüpften. –
Wird möglicherweise nicht aufgerufen, da die Schaltfläche beim Klicken deaktiviert ist. Meine Lösung verwendet setTimeout bei 1ms, um dies zu umgehen. – Nick