function ajax_example_simplest($form, &$form_state) {
//This is my ajax trigger element
$form['element_trigger'] = array(
'#type' => 'select',
'#options' => array(
'one' => 'one',
'two' => 'two',
'three' => 'three',
),
'#ajax' => array(
'callback' => 'ajax_example_simplest_callback',
/** Q: Can I somehow declare more than one wrapper? **/
//Say for instance, something like:
'wrapper' => array('replace_div_1', 'replace_div_2'),
),
);
//replace_div_1
$form['element_to_be_replaced_1'] = array(
'#type' => 'textfield',
'#title' => t("My conditional field one"),
'#prefix' => '<div id="replace_div_1">',
'#suffix' => '</div>',
);
//... more form elements here
//replace_div_2
$form['element_to_be_replaced_2'] = array(
'#type' => 'textfield',
'#title' => t("My conditional field two"),
'#prefix' => '<div id="replace_div_2">',
'#suffix' => '</div>',
);
return $form;
}
function ajax_example_simplest_callback($form, $form_state) {
//... do my stuff here
//normally I would return only the form bit for replacing a single wrapper
//declared in the trigger element, like this:
return $form['element_to_be_replaced_blahblah'];
}
Ist es möglich, mehr als ein Formularbit in der Rückruffunktion zurückzugeben, um dem AJAX-Framework mitzuteilen, welches ersetzt $form['element_to_be_replaced_1']
werden soll <div id="replace_div_1">
und welches ersetzt $form['element_to_be_replaced_2']
werden soll <div id="replace_div_2">
?
Alternative Drupal 8-Syntax
Ein Unterschied besteht darin, dass der Renderbefehl gelöscht wird, da AjaxResponse Drupal \ Core \ Render implementiert \ AttachmentsInterface
machen($ form ['element_to_be_replaced_1'])Das Hinzufügen des Renderings funktioniert immer noch, aber ich hatte Probleme beim Aktualisieren einer TableSelect-Tabelle auf diese Weise.
quelle
Pierre Buyles Antwort hat bei mir nicht funktioniert. Etwas wie das Folgende funktionierte jedoch.
Beachten Sie den Aufruf von ajax_deliver () , anstatt das Array von AJAX-Befehlen zurückzugeben.
quelle