상태 요구 사항이있는 선택 필드에는 빈 값 "-Select-"가 나타나지 않습니다.


8

Drupal 7 양식 API를 사용하여 표준 선택 상자를 만들 때 첫 번째 값은 (새 '빈 양식'에서 선택한 값)입니다 <option selected="selected" value="">- Select -</option>. 이 값은 양식 정의에 지정되어 있지 않으며 양식을 변경하지 않습니다. (이건 괜찮아)

그러나 첫 번째를 사용하는 두 번째 선택 상자를 만들면 #states그러한 기본값이 없습니다. 여러 종속성이있는 복잡한 양식의 경우이 불일치가 문제입니다.

양식 정의의 예는 다음과 같습니다.

function sb_quickquote_test_form($form, &$form_state, $post=array()) {

  $fields['first_select'] = array(
    '#type'             => 'select',
    '#title'            => 'First select box',
    '#options'          => Array('First', 'Second', 'Third'),
    '#required'         => TRUE,
  );

  $fields['dependent_delect'] = array(
    '#type'             => 'select',
    '#title'            => 'Dependent select box',
    '#options'          => Array('Something', 'Another thing', 'Something else', 'Final thing'),
    '#states'           => Array(
      'visible' => Array('select[name=first_select]' => array('value' => '2')),
      'required' => Array('select[name=first_select]' => array('value' => '2')),
    ),
  );

  $fields['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Submit'),
  );
  return $fields;
}

이 간단한 예에서는 2 개의 선택 상자와 제출 단추가 있습니다. 두 개의 선택 상자가 다음과 같이 표시됩니다.

 ______________      ________________
| - Select - |v|    | Something    |v|
`--------------'    `----------------'
| - Select -   |    | Something      | <- no empty option
| First        |    | Another thing  |
| Second       |    | Something else |
| Third        |    | Final thing    |
 --------------      ----------------

( #states설정 때문에 두 번째 선택 상자는 첫 번째 선택 상자에 "Third"가 선택된 경우에만 나타납니다)

이러한 불일치로 인해 상호 종속 필드가있는 복잡한 동적 양식을 생성하는 상황에서 문제가 발생합니다.

왜 필드에 일관성이없는 옵션이 제공되는지, 그리고 문제를 해결하기위한 최선의 방법은 무엇인지 아는 사람이 있습니까?

답변:


20

"빈 옵션"을 강제 실행하려면 다음과 같이 지정하십시오.

"#empty_option"=>t('- Select -'),

답변 해주셔서 감사합니다. 나는 Drupal이 이것을 확인하기 위해 어디에도 설정하지 않았으므로 그것에 대해 당신의 말을 받아들이고 다른 사람들의 투표를 주시해야합니다!
adamnfish

이 수정은 Drupal 8
Scott Joudry

2

이것을 변경해야합니다 :

 'visible' => Array('select[name=first_select]' => array('value' => '2')),
 'required' => Array('select[name=first_select]' => array('value' => '2')),

: 입력 선택

올바른 코드는 다음과 같습니다

 'visible' => Array(':input[name="first_select"]' => array('value' => '2')),
 'required' => Array(':input[name="first_select"]' => array('value' => '2')),

1

doterobcn 응답을 확장하기 위해 빈 옵션의 빈 값 (키)을 설정할 수도 있습니다.

드루팔 8에서 :

$form['country'] = [
  '#type' => 'select',
  '#multiple' => FALSE,
  '#title' => t('Country:'),
  '#required' => FALSE,
  '#options' => $countries,
  '#default_value' => 'FR',
  '#empty_option' => t('- None -'),
  '#empty_value' => '_none',
];

어느 것이 줄 것인가 :

<option value="_none">- None -</option>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.