Wie rendere ich ein Formular in einem Div durch einen Javascript-Aufruf?
Ich versuche, ein Formular mit einem Javascript-Aufruf in ein div zu laden. Ich kann das Formular im div erhalten, aber nichts funktioniert (Felder für die automatische Vervollständigung, wysiwyg-Felder, benutzerdefinierter Submit-Handler).
Ich weiß, dass mir etwas fehlen muss, aber ich kann nicht herausfinden, was es ist.
Was ich jetzt habe, um das Formular zu bekommen:
$form = \Drupal::formBuilder()->getForm('Drupal\my_module\Form\MyForm'); $renderable = [
'#theme' => 'my_form',
'#form' => $form, ]; $rendered = Drupal::service('renderer')->renderPlain($renderable); $response = new AjaxResponse();
$response->setData($rendered);
return $response;
Ich habe auch versucht , renderRootstatt renderPlain, aber ohne Erfolg.
Die Zweigdatei sieht folgendermaßen aus (sehr einfach):
<div id="form-container">
{% include 'header.html.twig' with {
type : 'manual'
} %}
<div class="content">
{{ form }}
</div>
</div>
Jede Hilfe wird sehr geschätzt.
Antworten
Sie müssen der Ajax-Antwort Ajax-Befehle hinzufügen, indem Sie das nicht gerenderte Render-Array verwenden:
$response->addCommand(new ReplaceCommand('#form-container', $renderable));
Übrigens können Sie eine Drupal-Ajax-Antwort nur zurückgeben, wenn Sie eine Ajax-Anfrage über ausgelöst haben ajax.js. Außerhalb von Formularübermittlungen tun Sie dies normalerweise, indem Sie die Klasse use-ajaxeinem Link hinzufügen . Benutzerdefinierten JS-Code finden Sie unter Auslösen vorhandener, nicht formularer Ajax aus einem JavaScript-Ereignis