具有状态要求的选择字段不会出现空值“-选择-”


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设置,仅当第一个选择框选择了“第三”时,第二个选择框才会出现)

在我们生成具有相互依赖的字段的复杂动态形式的情况下,这种不一致导致了问题。

有谁知道为什么给字段提供不一致的选项以及解决该问题的最佳方法是什么?

Answers:


20

要强制使用“空选项”,请为其分配以下内容:

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

感谢您的回答。我在任何地方都没有设置Drupal来检查此内容,因此我必须信服您并密切注意其他人的投票!
adamnfish

此修复程序还适用于Drupal 8
Scott Joudry '18

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答案,您还可以设置您的empty选项的empty值(键)。

在Drupal 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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.