Drupal scheint nicht zu verhindern, dass mehrere Formulare gesendet werden, auch nicht auf Knotenseiten. In dieser Qualitätssicherung wird vorgeschlagen , sie auf der Serverseite zu beheben.
Wie kann ich die Senden-Schaltfläche deaktivieren, nachdem ich auf geklickt habe?
Irgendwelche anderen Lösungen?
Antworten:
Es ist nur in dev, aber das Hide Submit- Modul würde den Trick machen. Eines der Merkmale ist:
Ich habe es gerade auf einer Dev-Site installiert und es scheint gut für Node-Add-Formulare zu funktionieren. Wenn Sie auf die Schaltfläche "Senden" klicken, wird diese ausgeblendet und durch ein Ladebild und die Meldung "Bitte warten ..." ersetzt, bevor das Formular endgültig gesendet wird. Ich habe es auf keinen anderen Formen versucht.
quelle
hook_form_alter()
- wenn es verwendet wirdhook_form_FORMID_alter()
, schalten Sie es auf generisch umhook_form_alter()
. Wenn es generischhook_form_alter()
mit if inside ist, fügen Sie einigeor
davon hinzuif
.Hier ist die Lösung für Drupal 7. Code ist eine vereinfachte Version des Hide Submit-Moduls.
Dieser Code funktioniert auch mit "Weitere hinzufügen" -Schaltflächen und AJAX-Formularen.
quelle
Der einfachste Weg ist eine themenbasierte Javascript-Lösung, um die Schaltfläche nach dem Absenden des Formulars zu deaktivieren. Fügen Sie in die Datei theme.info Ihre Javascript-Datei ein, damit sie von der Theme-API geladen werden kann.
Fügen Sie nun im Abschnitt themename-script.js im Abschnitt Drupal.behaviors.themename Folgendes hinzu:
Der Ablauf ist also wie folgt:
Ich bin mir sicher, dass bei einer Ajax-Verarbeitung das oben Genannte gefährlich sein könnte und das Senden des Formulars nie wieder möglich ist, wenn ein Fehler in der form_api-Validierung auftritt. Testen Sie dies und passen Sie es an Ihre Bedürfnisse an. Ich habe beide Schaltflächen deaktiviert, da Sie immer noch auf die Vorschau-Schaltfläche klicken konnten, während die Senden-Schaltfläche deaktiviert war. Offensichtlich variieren Ihre Laufleistung meine.
quelle
Drupal.behaviors
Deklarationsstil. es wird nicht für Drupal 7 funktionieren. Es müsste seinDrupal.behaviors.themename = { attach: function (context, settings) { // ...
. Weitere Informationen finden Sie unter Verwalten von JavaScript in Drupal 7