ajax を使用して、いくつかのラジオ ボタンで行った選択に基づいて、いくつかのフォーム要素を表示または非表示にしようとしています。
ラジオには「タグ」または「フォーム」の 2 つの選択肢があります。「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 が true の場合、$form['body']['#access'] が実際に 1 に設定されることがわかりました。