Я создал форму с вводом текста и набором радиокнопок, а также кнопкой отправки ajax.Когда пользователь вводит текст и затем щелкает ajax-submit, форма перезагружается, фильтруя радиоэлементы по текстовому вводу.
Все это прекрасно работает, но есть любопытное поведение - после каждого последовательного ajax-click-submit, добавляется дополнительный элемент ajax throbber (см. изображения).
Ожидаемое поведение будет состоять в том, что, несмотря на последовательные ajax-click-submit, отображается только один throbber.
Другойнеобычное поведение заключается в том, что при включении $form_state->rebuild()
в функцию submit обратный вызов ajax вызывается только при первом нажатии.В похожей форме, которую я построил недавно, это был не тот случай.В противном случае обратный вызов формы и ajax с фильтрацией работает, как и ожидалось.
несколько экземпляров в разметке
см. Несколько пульсаторов в действии
$form['container']['search_submit'] = [
'#type' => 'submit',
'#value' => 'Filter',
'#submit' => ['::filterOptionsSubmitCallback'],
'#ajax' => [
'event' => 'click',
'callback' => [$this, 'filterOptionsAjaxCallback'],
'wrapper' => $this->formSelector,
'url' => Url::fromRoute($this->formRoute),
],
];
public function filterOptionsSubmitCallback(array &$form, FormStateInterface $form_state)
{
$search = $form_state->getValue('search');
$filter = $form_state->getValue('filter');
$this->store->set('searchString', $search);
$this->store->set('exerciseFilter', $filter);
// $form_state->setRebuild();
}
public function filterOptionsAjaxCallback(array &$form, FormStateInterface $form_state)
{
return $form['container'];
}