I’m building pretty simple forms loaded with AJAX and displayed with Foundation Reveal. I can get the form submission to work with AJAX, and update the markup inside the reveal, but with the AJAX-powered submission button, the validation method is not executed.
Why? How can I get the form validated with AJAX?
I just want the normal form validation process, where I can add my own validation to ::validateForm
and then pass control to my AJAX form submission handler.
$form['submit'] = [ '#type' => 'submit', '#value' => 'Tallenna', '#ajax' => [ 'callback' => '::ajaxFormSubmitHandler' ] ];
I tried with $form['#validate'] = array('::validateForm');
, but it doesn’t work. I also tried calling Form::validateForm($form, $form_state)
in the submission handler with the following code.
Form::validateForm($form, $form_state); if ($form_state->hasAnyErrors()) { $form_state->setRebuild(); $errors = $form_state->getErrors(); return($form); } else { $form_state->setRebuild(FALSE); }
I can set up the callback for a single element.
$form['field_asiakkaan_nimi'] = [ '#type' => 'textfield', '#title' => $this->t('Asiakkaan nimi'), '#required' => TRUE, '#ajax' => [ 'callback' => array($this, 'validateNimiAjax'), 'event' => 'change', ], '#suffix' => '<span class="nimi-valid-message"></span>' ];
I can use that callback for the field processing.
public function validateNimiAjax(array &$form, FormStateInterface $form_state) { $response = new AjaxResponse(); $message = 'Nimi validoitu!'; $response->addCommand(new HtmlCommand('.nimi-valid-message', $message)); return $response; }
This doesn’t seem to be the proper way to go about this.
I am also getting this error:
The form has become outdated. Copy any unsaved work in the form below and then reload this page.
How can I get AJAX delivered forms validated and processed?
Sponsored by SupremePR