我正在尝试使用 ajax 根据您在某些单选按钮上所做的选择来使某些表单元素变得可见或不可见。
有两种选择:收音机的“标签”或“表格”。“tag”是默认的,body 字段一开始是可见的。但是,如果您单击“表单”选项,则正文字段会消失。然后我希望能够再次单击“标签”并使正文字段再次可见,但在这里我遇到了麻烦。
以下是相关代码:
function format_and_filter_form_protocol_node_form_alter(&$form, &$form_state,$form_id) {
$form['protocol_form_view_radios'] = array(
'#type' => 'radios',
'#title' => 'Input by:',
'#options' => array('taging','form'),
'#default_value' => 0,
'#ajax' => array(
'callback' => 'format_and_filter_change_input_callback',
'wrapper' => 'body-add-more-wrapper',
),
'#executes_submit_callback' => FALSE,
'#limit_validation_errors' => array(),
'#weight' => -31,
);
}
function format_and_filter_change_input_callback($form,&$form_state) {
if ($form_state['input']['protocol_form_view_radios'] == 0) {
$form['body']['#access'] = TRUE;
}
else {
$form['body']['#access'] = FALSE;
}
return $form['body'];
}
有没有人解释为什么 $form['body']['#access'] = TRUE 不会让 body 字段再次可见?我检查了 $form 数组,发现当 $form_state['input']['protocol_form_view_radios'] == 0 为真时,$form['body']['#access'] 实际上设置为 1。