2013-04-04 22 views
2

我有狀態字段作爲下拉列表。在改變州時,應在複選框中查看城市。下面是我的代碼Drupal 7複選框數組替換ajax回調

$form['rate_the_service']['state'] = array(
    '#type' => 'select', 
    '#prefix'=>'<div id="dropdown-third-replace">', 
    '#suffix'=>'</div>', 
    '#options'=>array(
    '0' => t('state1'), 
    '1' => t('state2'), 
    '2' => t('state3') 
), 
    '#attributes' => array(
    'selected' => array('selected') 
), 
    '#validated' => TRUE, 
    '#ajax' => array(
    'callback' => 'ajax_example_dependent_dcheck_state_callback', 
    'wrapper' => 'checkboxes-four-replace', 
), 
    '#suffix'=>'</div>', 
); 

所以,當上改變國家的城市將要使用的回調函數「ajax_example_dependent_dcheck_state_callback」

下面是默認的城市代碼顯示在複選框:

$cityarray = array(
    '1' => 'chk1' 
); 

$form['rate_the_service']['city'] = array(
    '#prefix'=>'<div id="checkboxes-four-replace">', 
    '#type' => 'checkboxes', 
    '#options' => $cityarray, 
    '#default_value' => isset($values['city']) ? $values['city'] : NULL, 
    '#suffix'=>'</div></div>', 
); 

///////////轉換ajax_example_dependent_dcheck_state_callback函數調用

function ajax_example_dependent_dcheck_state_callback($form, $form_state) { 
    $state = $form_state['values']['state']; 
    $city_array = array(
    '0' => 'city1', 
    '2' => 'city2', 
    '3' => 'city3' 
); 
    $options[$state] = $city_array; 
    $form['rate_the_service']['city']['#options'] = $city_array; 
    return $form['rate_the_service']['city']; 
} 

在onchange狀態時,'checkboxes-four-replace'將被替換爲city1,2,3複選框

onchange功能不起作用。如果我改變類型爲''#type'=>'選擇''而不是''#type'=>'複選框'「,它的工作正常。但我需要這個複選框。我在這裏錯了什麼。請幫幫我。

+0

+ 1有同樣的問題。 replace()函數似乎不被支持。 – Atomox 2013-05-29 17:43:58

+0

我有一個工作解決方案,我嘲笑起來 - 但我不想分享,直到你澄清這句話:你的帖子的開始是令人困惑的:你的句子陳述「雖然onchange州的城市應該在複選框中查看。下面是我的代碼「〜國家應該是複選框還是選擇? – inertialmedia 2013-05-31 13:56:28

回答

0

你的帖子的開頭令人困惑:你的句子陳述「在更改狀態時城市應該在複選框中查看,下面是我的代碼」〜州應該是複選框或選擇?

無論哪種方式,我有這樣的使用狀態的代碼爲「選擇」和城市爲「複選框」:

function state_form($form, &$form_state) { 
    $form = array(); 

    $form['rate_the_service']['state'] = array(
    '#type' => 'select', 
    '#prefix'=>'<div id="dropdown-third-replace">', 
    '#suffix'=>'</div>', 
    '#options'=>array(
     '0' => t('Ohio'), 
     '1' => t('New York'), 
    ), 
    '#validated' => TRUE, 
    '#ajax' => array(
     'event' => 'change', 
     'callback' => 'ajax_example_dependent_dcheck_state_callback', 
     'wrapper' => 'checkboxes-four-replace', 
    ), 
); 

    $city_array = array(
    '1' => array(
     '1' => 'Cincinnati', 
     '2' => 'Cleveland', 
     '3' => 'Toledo' 
    ), 
    '2' => array(
     '4' => 'New York City', 
     '5' => 'Buffalo', 
     '6' => 'Syracuse' 
    ), 
); 

    if (isset($form_state['values']['state']) && $form_state['values']['state'] == 1) { 
    $form['rate_the_service']['city'] = array(
     '#prefix'=>'<div id="checkboxes-four-replace">', 
     '#type' => 'checkboxes', 
     '#options' => $city_array[2], 
     '#default_value' => isset($values['city']) ? $values['city'] : array('1'), 
     '#suffix'=>'</div></div>', 
    ); 
    } else { 
    $form['rate_the_service']['city'] = array(
     '#prefix'=>'<div id="checkboxes-four-replace">', 
     '#type' => 'checkboxes', 
     '#options' => $city_array[1], 
     '#default_value' => isset($values['city']) ? $values['city'] : array('2'), 
     '#suffix'=>'</div></div>', 
    ); 
    } 
    return $form; 
} 

/** 
* Ajax Callback for development_form 
*/ 
function ajax_example_dependent_dcheck_state_callback($form, $form_state) { 
    return $form['rate_the_service']['city']; 
} 

可選,如果你想要的狀態是「複選框」,以及城市,你可以這樣做:

function state_form($form, &$form_state) { 
    $form = array(); 

    $form['rate_the_service']['state'] = array(
    '#type' => 'checkboxes', 
    '#prefix'=>'<div id="dropdown-third-replace">', 
    '#suffix'=>'</div>', 
    '#options'=>array(
     'ohio' => t('Ohio'), 
     'new_york' => t('New York'), 
    ), 
    '#validated' => TRUE, 
    '#ajax' => array(
     'event' => 'change', 
     'callback' => 'ajax_example_dependent_dcheck_state_callback', 
     'wrapper' => 'checkboxes-four-replace', 
    ), 
); 

    $city_array = array(
    '1' => array(
     '1' => 'Cincinnati', 
     '2' => 'Cleveland', 
     '3' => 'Toledo' 
    ), 
    '2' => array(
     '4' => 'New York City', 
     '5' => 'Buffalo', 
     '6' => 'Syracuse' 
    ), 
); 

    // refine as needed to fit your validation, if this is your use case 
    if (isset($form_state['values']['state']['ohio']) && $form_state['values']['state']['ohio'] == 'ohio') { 
    $form['rate_the_service']['city'] = array(
     '#prefix'=>'<div id="checkboxes-four-replace">', 
     '#type' => 'checkboxes', 
     '#options' => $city_array[1], 
     '#default_value' => isset($values['city']) ? $values['city'] : array('1'), 
     '#suffix'=>'</div></div>', 
    ); 
    } else if (isset($form_state['values']['state']['new_york']) && $form_state['values']['state']['new_york'] == 'new_york') { 
    $form['rate_the_service']['city'] = array(
     '#prefix'=>'<div id="checkboxes-four-replace">', 
     '#type' => 'checkboxes', 
     '#options' => $city_array[2], 
     '#default_value' => isset($values['city']) ? $values['city'] : array('2'), 
     '#suffix'=>'</div></div>', 
    ); 
    } else { 
    $form['rate_the_service']['city'] = array(
     '#prefix'=>'<div id="checkboxes-four-replace">', 
     '#type' => 'checkboxes', 
     '#options' => array(), 
     '#default_value' => isset($values['city']) ? $values['city'] : array('2'), 
     '#suffix'=>'</div></div>', 
    ); 
    } 
    return $form; 
} 

/** 
* Ajax Callback for development_form 
*/ 
function ajax_example_dependent_dcheck_state_callback($form, $form_state) { 
    return $form['rate_the_service']['city']; 
} 

,這裏是與各國的「選擇」框和城市作爲一個「選擇」框的情況下

function state_form($form, &$form_state) { 
    $form = array(); 

    $form['rate_the_service']['state'] = array(
    '#type' => 'select', 
    '#prefix'=>'<div id="dropdown-third-replace">', 
    '#suffix'=>'</div>', 
    '#options'=>array(
     'ohio' => t('Ohio'), 
     'new_york' => t('New York'), 
    ), 
    '#validated' => TRUE, 
    '#ajax' => array(
     'event' => 'change', 
     'callback' => 'ajax_example_dependent_dcheck_state_callback', 
     'wrapper' => 'checkboxes-four-replace', 
    ), 
); 

    $city_array = array(
    '1' => array(
     '1' => 'Cincinnati', 
     '2' => 'Cleveland', 
     '3' => 'Toledo' 
    ), 
    '2' => array(
     '4' => 'New York City', 
     '5' => 'Buffalo', 
     '6' => 'Syracuse' 
    ), 
); 

    if (isset($form_state['values']['state']) && $form_state['values']['state'] == 'new_york') { 
    $form['rate_the_service']['city'] = array(
     '#prefix'=>'<div id="checkboxes-four-replace">', 
     '#type' => 'select', 
     '#options' => $city_array[2], 
     '#default_value' => isset($values['city']) ? $values['city'] : array('1'), 
     '#suffix'=>'</div></div>', 
    ); 
    } else { 
    $form['rate_the_service']['city'] = array(
     '#prefix'=>'<div id="checkboxes-four-replace">', 
     '#type' => 'select', 
     '#options' => $city_array[1], 
     '#default_value' => isset($values['city']) ? $values['city'] : array('2'), 
     '#suffix'=>'</div></div>', 
    ); 
    } 
    return $form; 
} 

/** 
* Ajax Callback for development_form 
*/ 
function ajax_example_dependent_dcheck_state_callback($form, $form_state) { 
    return $form['rate_the_service']['city']; 
}