2

状態フィールドをドロップダウンとして持っています。州を変更している間、都市はチェックボックスで表示する必要があります。以下は私のコードです

$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'];
}

状態を変更している間、「checkboxes-four-replace」はcity1,2,3チェックボックスに置き換えられます

onchange 機能が動作していません。タイプを " '#type' => 'checkboxes' " ではなく ''#type' => 'select' ' に変更すると、正常に動作します。しかし、チェックボックスとしてこれが必要です。私はここで間違っています。私を助けてください。

4

1 に答える 1

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'];
}
于 2013-05-31T14:05:53.473 に答える