Ich habe ein Webformular mit der Formular-API erstellt. Ich verwende die #AJAX
Feldoption, um jedem Feld eine AJAX-Validierung hinzuzufügen.
Ist es möglich, das Formular mit AJAX zu validieren und zu senden, ohne die Seite neu zu laden? Wenn die Validierung fehlschlägt, möchte ich eine Fehlermeldung anzeigen. Wenn die Validierung erfolgreich ist, möchte ich eine Meldung anzeigen (idealerweise in einem Leuchtkasten) und die Formularfelder zurücksetzen.
Mein Code bisher:
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
'#default_value' => '',
'#maxlength' => '128',
'#required' => TRUE,
'#ajax' => array(
'callback' => '_validate_name',
'wrapper' => 'name-error-icon-container',
'method' => 'html',
'effect' => 'none',
'progress' => array(
'message' => NULL,
),
),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
'#ajax' => array(
'callback' => '_handle_form_submit',
'effect' => 'fade',
),
);
Rückruffunktionen sehen folgendermaßen aus:
function _validate_name($form, $form_state) {
if ($form_state['values']['name'] != '') {
$output = 'OK';
}
else {
$output = 'Enter a value';
}
return $output;
}
function _handle_form_submit($form, $form_state) {
}
Ich bin mir jedoch nicht sicher, was in der _handle_form_submit
Funktion zum Überprüfen und anschließenden Zurückgeben einer Nachricht oder zum Senden eines Formulars und zum Zurücksetzen von Feldern enthalten sein soll.
Ich weiß, dass diese Frage schon seit ein paar Jahren herumliegt, aber ich glaube nicht, dass eine der anderen Antworten wirklich den Sinn der Einreichung des Drupal 7 Ajax-Formulars hat, also werde ich versuchen, es zu erklären.
Da Ihr Formular auch ohne den Ajax funktionieren sollte, sollte Ihr Ajax-Submit-Handler nichts anderes tun, als das Formular zurückzugeben. Alles andere sollte in Ihrer Validierungs- und Übermittlungsfunktion enthalten sein.
quelle
Ich denke, der Beitrag von maxtorete am 17. Oktober 2011 scheint ein vollständigeres Beispiel zu geben, wenn sowohl
form_validate()
als auch verwendet werdenform_submit()
(Ich habe es noch nicht getestet.)
Auch Joshua Stewardsons Antwort beim Stapelüberlauf hat ein gutes Beispiel:
Joshua weist darauf hin, dass Validierungsfehlermeldungen das
#ajax['wrapper']
Element vollständig ersetzen, sodass Ihr Rückruf dieses Element erneut ersetzen muss, wenn Sie es ersetzen.quelle
Im Allgemeinen sollten Validierung und Formularübermittlung in den üblichen Rückrufen _validate () und _submit () erfolgen. Die Idee ist, dass Formulare immer noch ohne Ajax funktionieren sollten.
Das einzige, was die #ajax-Rückrufe tun sollten, ist, den Teil des Formulars zurückzugeben, der gemäß dem definierten Wrapper ersetzt werden soll.
quelle
#ajax
Rückruffunktion in Drupal 7 geben Sie nur den Teil des Formulars zurück, den Sie ersetzen möchten.Es gibt zwei Möglichkeiten
1)
2) Beispielmodul http://cgit.drupalcode.org/examples/tree/ajax_example/ajax_example.module?id=refs/heads;id2=7.x-1.x#l402
quelle
In meinem Fall führte die Verwendung eines
submit
Typs dazu, dass das Formular immer gesendet wurde, und ich änderte es in einbutton
mit#ajax
angegebenem. Dann musste ich meine Validierung im Ajax-Rückruf durchführen.Ich machte eine Werkzeugscheibe; Ich weiß nicht, ob das dazu beiträgt.
quelle