Флажок Drupal Form APi указывает - PullRequest
1 голос
/ 26 октября 2011

Итак, я создал свой флажок в своей форме

$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 Ответ

1 голос
/ 09 августа 2012

Часто, когда вы используете систему Form API #ajax, указанный вами wrapper фактически заменяется другим элементом ПОСЛЕ drupal_html_id(), который снова вызывается в обертке элемента.Поэтому я бы проверил разметку элемента "subject" в Firebug / Web Inspector после того, как ваш AJAX-контент произошел - я держу пари, что 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>',
);

Надеюсь, это поможет!

...