Kiedy tworzę standardowe pole wyboru przy użyciu interfejsu API formularza Drupal 7, pierwszą wartością (także tą wybraną w świeżym „pustym formularzu”) jest <option selected="selected" value="">- Select -</option>
. Ta wartość nie jest określona w definicji formularza i nie zmieniam formularza. (Jest okej)
Jednak gdy tworzę drugie pole wyboru, które zależy od pierwszego użycia #states
, nie ma ono żadnej takiej wartości domyślnej. W przypadku złożonych formularzy z wieloma zależnościami ta niespójność stanowi problem.
Przykładowa definicja formularza jest następująca:
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;
}
W tym prostym przykładzie mamy 2 pola wyboru i przycisk przesyłania. Dwa pola wyboru są wyświetlane jako:
______________ ________________
| - Select - |v| | Something |v|
`--------------' `----------------'
| - Select - | | Something | <- no empty option
| First | | Another thing |
| Second | | Something else |
| Third | | Final thing |
-------------- ----------------
(Ze względu na #states
ustawienie drugie pole wyboru pojawia się tylko wtedy, gdy w pierwszym polu wyboru wybrano „Trzeci”)
Ta niespójność powoduje problemy w sytuacji, gdy generujemy złożone formy dynamiczne z polami współzależnymi.
Czy ktoś ma pojęcie, dlaczego pola mają niespójne opcje i jakie jest najlepsze podejście do rozwiązania problemu?
musisz to zmienić:
wybierz, aby wprowadzić :
poprawny kod to:
źródło
Aby rozszerzyć odpowiedź doterobcn, możesz również ustawić pustą wartość (klawisz) pustej opcji.
W Drupal 8:
Co da:
źródło