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'];
}
¿Es posible devolver más de un bit de formulario en la función de devolución de llamada que indica al marco AJAX que $form['element_to_be_replaced_1']
debería reemplazar <div id="replace_div_1">
y $form['element_to_be_replaced_2']
debería reemplazar <div id="replace_div_2">
?
Sintaxis alternativa de Drupal 8
Una diferencia es que el comando de renderizado se cae, porque AjaxResponse implementa Drupal \ Core \ Render \ AttachmentsInterface
render($ form ['element_to_be_replaced_1'])Agregar el renderizado aún funciona, pero tuve problemas al actualizar una tabla TableSelect de esa manera.
fuente
La respuesta de Pierre Buyle no funcionó para mí. Sin embargo, algo como lo siguiente funcionó.
Tenga en cuenta la llamada a ajax_deliver () , en lugar de devolver la matriz de comandos AJAX.
fuente