信じられないほど簡単なことで問題があります。multiselect-form要素の要素を選択すると、テキストフィールドが有効になります。私が抱えている問題は、Drupalが指定したコールバック関数を取得できないことです。
ここでmultiselect-elementを作成します。
$form['foocat'] = array(
'#type' => 'fieldset',
'#title' => t('Manage subcategories'),
'#prefix' => '<div class="fieldset">',
'#suffix' => '</div>',
);
$form['foocat']['subcategories'] = array(
'#type' => 'select',
'#default_value' => '',
'#title' => $foocategory,
'#options' => $options,
'#ajax' => array(
'callback' => 'edit_displayname_callback',
'wrapper' => 'displayname',
),
'#attributes' => array('id' => 'foocats',),
'#prefix' => '<div class="formselect" id="selectmapcat">',
'#suffix' => '</div>',
'#size' => 9,
);
コードの少し先に、テキストフィールドを作成します。
$form['foocat']['subcat_displayname'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
'#default_value' => $entity->foocategory,
'#size' => 25,
'#maxlength' => 31,
'#prefix' => '<div class="floater" id="displayname">',
'#suffix' => '</div>',
'#disabled' => TRUE,
);
if(!empty($form_state['subcategories'])) {
$form['foocat']['subcat_displayname']['#disabled'] = FALSE;
//Code for setting the textfield, dependent on what's been selected in the multiselect
}
そして、これは私のコールバック関数です:
function edit_displayname_callback($form, &$form_state) {
watchdog("Test", "Testing callback..", array(), WATCHDOG_ALERT);
return $form['foocat']['subcat_displayname'];
}
コールバックが呼び出されることすらありません。理由はわかりません。同じフォームの別の部分でAJAXを使用していますが、AJAXは機能するので、フォームの問題ではないと思います。
誰でも問題を見つけることができますか?