Ich habe ein Drupal-Formular, aber ich füge es der Seite als Ergebnis eines AJAX-Rückrufs hinzu.
Ich benötige dieses Formular, um einen neuen Rückruf auszulösen. Mein Code unten:
$form['#suffix'] = '<div id="form-return-message-box">this is the return box</div>';
$form['#attached']['js'] = array('misc/ajax.js');
$form['markup'] = array(
'#type' => 'markup',
'#markup' => '<h2>This is a form</h2>'
);
$form['button'] = array(
'#type' => 'button',
'#value' => t('Submit'),
'#ajax' => array(
'callback' => 'module_myform_callback',
'wrapper' => 'form-return-message-box',
'method' => 'replace',
'effect' => 'fade',
),
);
$replace_layer = '#somelayer';
$commands = array();
$commands[] = ajax_command_replace($replace_layer, drupal_render($form));
$page = array(
'#type' => 'ajax',
'#commands' => $commands,
);
ajax_deliver($page);
Das passiert also: Dieses Formular wird in einen Container namens "Somelayer" eingefügt, der bereits auf der Seite vorhanden ist (ich habe diesen Teil des Codes nicht hinzugefügt, weil ich dachte, dass dies unnötig wäre). Es wurde von einem Link mit der Klasse 'use-ajax' aufgerufen.
Das Formular wird also nach einem durch den Link ausgelösten AJAX-Rückruf wie gewünscht auf der Seite gerendert. Dieser Teil funktioniert in Ordnung.
Aber hier ist der (sehr) knifflige Teil: Ich möchte auch die neue Form-AJAX-Funktionalität beibehalten (überprüfen Sie den '#ajax'-Teil des Arrays), der nicht auftritt. Nach dem Rendern des Formulars löst die Schaltfläche keinen AJAX-Code aus. Wenn Sie darauf klicken, wird die Seite aktualisiert und die Rückruffunktion wird nicht ausgelöst (hier nicht hinzugefügt, um Platz zu sparen).
Wenn Sie den Quellcode einer regulären Formularseite mit AJAX untersuchen, sehen Sie Code wie diesen, der die AJAX-Funktionalität aktiviert:
"ajax":{"edit-something":{"callback":"module_formname_callback","wrapper":"wrapper-name","method":"replaceWith","effect":"fade","event":"change","url":"\/spabear\/system\/ajax" ...
Wenn ich mir den Quellcode des Formulars ansehe, das meiner Seite hinzugefügt wurde, kann ich feststellen, <script></script>
dass es in meinem dynamisch geladenen Formular keinen Code gibt, der den AJAX-Rückruf auslösen würde. Wie kann ich alle AJAX-Funktionen emulieren, wenn das Formular nach einem AJAX-Rückruf gerendert wird?