所以我在表单中创建了我的复选框
$form['existing_customer'] = array(
'#type' => 'checkbox',
'#title' => t('Are you an existing customer'),
'#ajax' => array(
'callback' => 'checkbox_selected',
'wrapper' => 'subject',
),);
这会调用我的函数并更改复选框中的值
问题是,如果未经检查,我无法将其切换回来
function checkbox_selected(&$form, &$form_state) {
if ($form_state['values']['existing_customer'] == 1) {
$my_options = array( 'select' => t('Select'), 'mr' => t('Mr'), 'mrs' => t('Mrs'), 'miss' => t('Miss'), 'ms' =>t('Ms'), 'sir' =>t('Sir'), 'dr' => t('Dr'), 'prof' => t('Prof') );
}
elseif ($form_state['values']['existing_customer'] == 0){
$my_options = array( 'seconfZ' => t('jimmy'), 'mr' => t('Mr'), );
}
$form['subject'] = array(
'#type' => 'select',
'#title' => t('Subject'),
'#options' => $my_options//$form['subject_options']['#value']
);
return $form['subject'];
}
我以为我可以切换复选框值或状态,但没有快乐?
答案 0 :(得分:1)
通常,当您使用Form API #ajax
系统时,您指定的wrapper
实际上已替换为另一个元素,而在元素包装器上再次调用drupal_html_id()
。所以我会在你的AJAX事件发生后检查Firebug / Web Inspector中“subject”元素的标记 - 我认为包装div现在就像是“subject - 1”。
要解决此问题,您需要在要替换的项目上手动设置包装器div - 在重建表单时不会更改。例如,在表单构建器中:
$form['existing_customer'] = array(
'#type' => 'checkbox',
'#title' => t('Are you an existing customer'),
'#ajax' => array(
'callback' => 'checkbox_selected',
'wrapper' => 'subject-wrapper',
),
);
$form['subject'] = array(
'#prefix' => '<div id="subject-wrapper">',
...
`#suffix' => '</div>',
);
希望有所帮助!