Drupal Form APi Checkbox声明

时间:2011-10-26 08:27:27

标签: ajax forms api drupal checkbox

所以我在表单中创建了我的复选框

$form['existing_customer'] = array(
    '#type' => 'checkbox',
    '#title' => t('Are you an existing customer'),
    '#ajax' => array(
    'callback' => 'checkbox_selected',
    'wrapper' => 'subject',
),);

这会调用我的函数并更改复选框中的值

问题是,如果未经检查,我无法将其切换回来

function checkbox_selected(&$form, &$form_state) {
    if ($form_state['values']['existing_customer'] == 1) {

        $my_options = array( 'select' => t('Select'), 'mr' => t('Mr'), 'mrs' => t('Mrs'), 'miss' => t('Miss'), 'ms' =>t('Ms'), 'sir' =>t('Sir'), 'dr' => t('Dr'), 'prof' => t('Prof') );

    }
    elseif ($form_state['values']['existing_customer'] == 0){
        $my_options = array( 'seconfZ' => t('jimmy'), 'mr' => t('Mr'), );

    }
    $form['subject'] = array(
        '#type' => 'select',
        '#title' => t('Subject'),
        '#options' => $my_options//$form['subject_options']['#value']
    );
    return $form['subject'];
}

我以为我可以切换复选框值或状态,但没有快乐?

1 个答案:

答案 0 :(得分:1)

通常,当您使用Form API #ajax系统时,您指定的wrapper实际上已替换为另一个元素,而在元素包装器上再次调用drupal_html_id()。所以我会在你的AJAX事件发生后检查Firebug / Web Inspector中“subject”元素的标记 - 我认为包装div现在就像是“subject - 1”。

要解决此问题,您需要在要替换的项目上手动设置包装器div - 在重建表单时不会更改。例如,在表单构建器中:

$form['existing_customer'] = array(
  '#type' => 'checkbox',
  '#title' => t('Are you an existing customer'),
  '#ajax' => array(
    'callback' => 'checkbox_selected',
    'wrapper' => 'subject-wrapper',
  ),
);
$form['subject'] = array(
  '#prefix' => '<div id="subject-wrapper">',
  ...
  `#suffix' => '</div>',
);

希望有所帮助!