Tôi gặp rắc rối với một thứ cực kỳ đơn giản: Khi tôi chọn một yếu tố trong thành phần đa dạng, tôi muốn trường văn bản được bật. Vấn đề tôi gặp phải là Drupal không bao giờ quản lý được chức năng gọi lại mà tôi đã chỉ định.
Ở đây tôi tạo phần tử đa lựa chọn của mình:
$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,
);
Một chút nữa trong mã tôi tạo trường văn bản của mình:
$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
}
Và đây là chức năng gọi lại của tôi:
function edit_displayname_callback($form, &$form_state) {
watchdog("Test", "Testing callback..", array(), WATCHDOG_ALERT);
return $form['foocat']['subcat_displayname'];
}
Cuộc gọi lại thậm chí không bao giờ được gọi, và tôi không biết tại sao. Tôi sử dụng AJAX trong một phần khác của cùng một hình thức và nó hoạt động, vì vậy tôi đoán đó không phải là vấn đề về hình thức.
Bất cứ ai có thể phát hiện ra vấn đề?