I can't get a form to display a (default?) value after an AJAX call. I am using the following code:
function foo_form ($form, &$form_state, $foo) {
$form['#prefix'] = '<div id="foo-form-wrapper">';
$form['#suffix'] = '</div>';
$form['copy'] = array(
'#type' => 'submit',
'#value' => t('Copy foo'),
'#limit_validation_errors' => array(),
// #submit is required to use #limit_validation_errors
'#submit' => array('foo_form_submit'),
'#ajax' => array(
'wrapper' => 'foo-form-wrapper',
'callback' => 'foo_form_callback',
),
);
$form['description'] = array(
'#type' => 'textarea',
'#title' => t('Short description'),
'#required' => TRUE,
'#maxlength' => 255,
'#default_value' => $foo->description,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
return $form;
}
function foo_form_callback($form, $form_state) {
return $form;
}
function foo_form_submit ($form, &$form_state) {
if (!isset($form_state['triggering_element']['#ajax'])) {
$foo = (object)$form_state['values'];
entity_get_controller('foo')->save($foo);
$form_state['redirect'] = 'admin/foo';
return;
} else {
form_set_value($form['description'], 'description text', $form_state);
$form_state['rebuild'] = true;
}
}
As I understand it, the form should automatically try to display the value if it is set in $form_state. When the callback is executed and the form is built, $form_state['values']['description'] is the value set in foo_form_submit. However, nothing is being displayed.