Hàm gọi lại AJAX không bao giờ được gọi


7

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 đề?

Câu trả lời:


2

Tôi đoán bạn đang thay đổi id bằng '#attributes' => array('id' => 'foocats',), Và bây giờ cuộc gọi lại không được thực thi vì id đã thay đổi.

nếu bạn thay đổi mã của mình, nó sẽ hoạt động (đã thử nghiệm trong cài đặt của riêng tôi)

$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,
);

Vấn đề là tôi cần ID trên $ form ['foocat'] ['danh mục con']. Tôi sử dụng nó để chọn nó trong jQuery
RienK

đã cập nhật câu trả lời của tôi, bạn có thể thêm một lớp thứ hai để bạn có thể sử dụng nó cho jQuery của mình:$('div.MY_SPECIAL_JQUERY_SELECTOR select')
FLY

Thật tuyệt, tôi sẽ kiểm tra nó ngay khi tôi trở lại làm việc!
RienK
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.