2015-11-13 2 views
3

Я работаю над кодом с зависимым выпадающим списком, используя API-интерфейс формы для Drupal 7. Запрос ajax выглядит как его работа (возвращающий статус 200), и я знаю, что метод моих параметров возвращает правильный массив, но он по-прежнему не меняется список ... это мой кодDrupal AJAX не меняет ниспадающий список

$m1 = drupal_map_assoc(
     array(
       7, 
      ) 
    ); 
$selected; 
if(isset($form_state['values']['program'])){ 
    $m2 = drupal_map_assoc(
     array(
      (int)$form_state['values']['program'], 
     ) 
    ); 
    $selected = key($m2); 
}else{ 
    $selected = key($m1); 
} 
$form['infocollect']['program'] = array(

     '#type' => 'select', 
     '#title' => t('Program'), 
     '#required' => TRUE, 
     '#options' => array(
      0 => t('Option 1'), 
      1 => t('Option 2'), 
      2 => t('Option 3'), 
      3 => t('Option 4'), 
      4 => t('Option 5'), 
      5 => t('Option 6'), 
      6 => t('Option 7'), 
     ), 
     '#ajax' => array(
       'callback' => 'deposit_campus_dropdown_callback', 
       'wrapper' => 'dropdown-campus-replace', 
       'method' =>'replaceWith', 
       ), 
     '#prefix' => '<tr><td>', 
     '#suffix' => '</td></tr>', 

); 
    $form['infocollect']['campus'] = array(
     '#type' => 'select', 
     '#title' => t('Campus'), 
     '#required' => TRUE, 
     '#prefix' => '<tr><td><div id="dropdown-campus-replace">', 
     '#suffix' => '</div></td></tr></table><br />', 
     '#options' => _deposit_get_campus_options($selected), 
); 

......

function deposit_campus_dropdown_callback($form, $form_state) { 
    return $form['campus']; 
} 

function _deposit_get_campus_options($key='') { 
    dpm($key); 

    $options = array(
    0 => drupal_map_assoc(
    array(
     t('Option 1'), 
    ) 
    ), 
    1 => drupal_map_assoc(
    array(
     t('Option 1'), 
    ) 
    ), 
    6 => drupal_map_assoc(
    array(
     t('Option 1'), 
    ) 
    ), 
    4 => drupal_map_assoc(
    array(
     t('Option 1'), 
     t('Option 2'), 
     t('Option 3'), 
     t('Option 4'), 
    ) 
    ), 
    5 => drupal_map_assoc(
    array(
     t('Option 1'), 
     t('Option 2'), 
     t('Option 3'), 
     t('Option 4'), 
    ) 
    ),  
    3 => drupal_map_assoc(
    array(
     t('Option 1'), 
     t('Option 2'), 
     t('Option 3'), 
    ) 
    ), 
    2 => drupal_map_assoc(
    array(
     t('Option 1'), 
     t('Option 2'), 
     t('Option 3'), 
    ) 
    ), 
    7 => drupal_map_assoc(
    array(
     t('none'), 
    ) 
    ), 
); 
    if (isset($options[$key])) { 
    dpm($options[$key]); 
    return $options[$key]; 
    } 
    else { 
    return array(); 
    } 
} 

UPDATE: я понял, что проблема заключается в функции обратного вызова function deposit_campus_dropdown_callback, он не находит $ form ['cam pus '] или $ form [' infocollect '] [' campus '], который заставляет ajax не работать, есть ли способ получить это исправление?

ответ

0

Я нашел ответ на этот вопрос, я изменил свою функцию обратного вызова, чтобы быть этим

$form['infocollect']['campus'] = array(
      '#type' => 'select', 
      '#title' => t('Campus'), 
      '#name' => 'campus', 
      '#required' => TRUE, 
      '#prefix' => '<div id="dropdown-campus-replace">', 
      '#suffix' => '</div>', 
      '#options' => _deposit_get_campus_options($form_state['values']['program']), 
    ); 
0

Вам необходимо использовать drupal_get_form в своем обратном вызове. Так что это:

function deposit_campus_dropdown_callback($form, $form_state) { return $form['campus']; }

Если вместо этого будет:

function deposit_campus_dropdown_callback($form, $form_state) { return drupal_get_form('campus'); }

0

drupal_get_form возвращение формы. В ajaxcall мы должны вернуть всю форму государственного значения, так что вы должны изменить код, как показано ниже:

function deposit_campus_dropdown_callback($form, &$form_state) { 
    return drupal_get_form('campus'); 
} 
+0

Хорошо, я попробовал добавить это, но, похоже, это сбой php, поскольку опция кампуса исчезает, я нашел другое решение, хотя я опубликовал – atg963

Смежные вопросы