我正在创建一个使用表单API '#ajax'
属性的表单,我需要对$form_state
按下启用AJAX的按钮的时间进行更改。这是我得到的:
在我的表单构建器函数中:
...
$form['some_fieldset']['add_more'] = array(
'#type' => 'button',
'#value' => t('Add more rows'),
'#ajax' => array(
'wrapper' => 'some-fieldset',
'callback' => 'my_module_settings_ajax',
'method' => 'replace',
'effect' => 'fade',
),
);
...
这是回调函数:
function my_module_settings_ajax($form, $form_state) {
// Make a change to $form_state
if ($form_state['some_fieldset']['add_more']) {
$form_state['values']['some_fieldset']['table'][] = array('first_field' => '',
'second_field' => '');
}
return $form['some_fieldset'];
}
$form_state
回调完成后,我所做的更改似乎丢失了。是否有任何方法可以$form_state
对此功能进行更改,或者我应该为此使用其他任何功能?
编辑
事实证明,回调是执行此逻辑的错误位置。相反,在表单构建器功能的顶部,我添加了以下内容:
// Respond to AJAX-triggger:
// Add new row
if ($form_state['triggering_element']['#name'] == 'add_more') {
$form_state['values']['some_fieldset']['table'][] = array('first_field' => '',
'second_field' => '');
}
当然,我必须给按钮起一个名字:
$form['some_fieldset']['add_more'] = array(
'#type' => 'button',
'#name' => 'add_more', // <-- Right here
'#value' => t('Add more rows'),
'#ajax' => array(
'wrapper' => 'some-fieldset',
'callback' => 'my_module_settings_ajax',
'method' => 'replace',
'effect' => 'fade',
),
);
现在就可以了!