我已经使用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;
}
在示例中,您可以看到form字段位于buildForm函数内,因此该元素已正确呈现。
我不只是返回render array元素,因为我进行了一些验证并返回了一些警报命令。
我需要重新绑定on jQuery方法吗?