我创建了一个带有文本输入和一组单选按钮以及一个ajax提交按钮的表单。当用户输入文本然后单击ajax提交时,将重新加载表单,并通过文本输入过滤单选元素。
这一切都很好,但是有一个奇怪的行为-在每次连续的ajax-click-submit之后,都会添加一个额外的ajax throbber元素(参见图片)。
预期的行为是,尽管连续进行了ajax-click-submit提交,但仅显示一个跳动。
另一个不寻常的行为是,当在commit函数中包含$form_state->rebuild()
时,仅在第一次单击时调用ajax回调。以我最近构建的类似形式,情况并非如此。否则,具有过滤功能的form和ajax回调将按预期工作。
see multiple throbbers in action
$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'];
}