Пример ajax формы с поддержкой валидации.
Drupal 8+
class ExampleForm extends FormBase {
/**
* {@inheritDoc}
*/
public function buildForm(array $form, FormStateInterface $form_state): array {
$form['#id'] = Html::getId($this->getFormId());
$form['testfield'] = [
'#type' => 'textfield',
'#title' => 'Testfield',
'#required' => TRUE,
];
$form['submit'] = [
'#type' => 'submit',
'#value' => 'Submit',
'#ajax' => [
'callback' => '::ajaxSubmit',
'wrapper' => $form['#id'],
],
];
return $form;
}
/**
* Ajax submit.
*/
public function ajaxSubmit(array &$form, FormStateInterface $form_state): array {
if ($form_state->hasAnyErrors()) {
return $form;
}
return ['#markup' => 'Form submitted'];
}
}
Drupal 7
/**
* Form builder.
*/
function modulename_testform($form, &$form_state) {
$form['testfield'] = array(
'#type' => 'textfield',
'#title' => 'Testfield',
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
'#ajax' => array(
'callback' => 'modulename_testform_ajax_submit',
'wrapper' => 'modulename-testform',
),
);
return $form;
}
/**
* Ajax submit.
*/
function modulename_testform_ajax_submit($form, &$form_state) {
if (form_get_errors()) {
return $form;
}
else {
return 'Form submitted';
}
}
При провале валидации форма обновится и выведутся сообщения об ошибках, иначе вместо формы появится текст "Form submitted".
Написанное актуально для
Drupal 7, Drupal 8+
Похожие записи
- Показать второй шаг многошаговой формы в модальном окне
- Навесить на элемент managed_file свой ajax callback (Как обновить всю форму при загрузки файла в managed_file)
- Восстанавливаем позицию текстового курсора при ajax обновлении формы
- Как выполнять свой js-код до или после любых AJAX запросов (изменение работы AJAX API)
- AJAX в форме корзины Commerce 2
Добавить комментарий