Я создал форму, используя Drupal 8 API. Я могу добавить поле динамически с помощью AJAX при нажатии на кнопку-переключатель. Это поле имеет собственную функцию #ajax, но оно не работает при нажатии, я даже не получаю обычного сообщения «Пожалуйста, подождите».
public function buildForm(array $form, FormStateInterface $form_state) {
...
$form['meeting']['existing']['replace_facilitator'] = [
'#type' => 'container',
'#id' => 'replace-facilitator-container',
];
$form['meeting']['existing']['replace_facilitator']['options'] = [
'#type' => 'checkbox',
'#title' => $this->t('Are you replacing a facilitator?'),
'#ajax' => [
'callback' => '::replaceFacilitatorCallback',
'wrapper' => 'facilitator-container',
'effect' => 'fade',
],
];
...
}
Это функция обратного вызова, которая возвращает поле.
public function searchMeetingCallback(array &$form, FormStateInterface
$form_state) : AjaxResponse {
$response = new AjaxResponse();
$renderer = \Drupal::service('renderer');
...
$response->addCommand(new ReplaceCommand('#replace-facilitator-container',
$renderer->renderRoot($form['meeting']['existing']['replace_facilitator'])));
...
return $response;
}
В этом примере вы можете видеть, что поле формы находится внутри функции buildForm, поэтому элемент отображается правильно.
Я не просто возвращаю элемент массива рендеринга, потому что я делаю некоторые проверки и возвращаю некоторую команду оповещения.
Нужно ли повторно привязывать метод on jQuery?