AJAXコールバック関数が呼び出されたことがない


7

信じられないほど簡単なことで問題があります。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は機能するので、フォームの問題ではないと思います。

誰でも問題を見つけることができますか?

回答:


2

IDを変更していると思います'#attributes' => array('id' => 'foocats',), 。IDが変更されたため、コールバックは実行されません。

コードを変更した場合、機能します(これを自分のインストールでテストしました)

$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 MY_SPECIAL_JQUERY_SELECTOR" id="selectmapcat">',
  '#suffix' => '</div>',
  '#size' => 9,
);

問題は、$ form ['foocat'] ['subcategories']のIDが必要なことです。私はそれをjQueryで選択するために使用します
RienK '26

:あなたはjQueryのためにそれを使用できるように私の答えを更新し、あなたは番目のクラスを追加することができます$('div.MY_SPECIAL_JQUERY_SELECTOR select')
FLY

いいですね、また仕事に戻ったらすぐにチェックします!
RienK
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.