更改列表框中所选属性的优先级

change the priority of selected attribute in listbox

示例代码如下:

在控制器中

 foreach($UserTypesArray as $key => $value)
    {
      $model->allowed_users[$key] = ['selected' => 'selected'];
    }
    $model->htmlOptions = array('multiple' => 'true', 'options' =>  $model->allowed_users);

在视图中

$form->field($model, 'user_type_id[]')->listBox($model->all_users ,  $model->htmlOptions);

好的,我们开始吧!

我在 "how to make list box with pre selected values from the database"

上搜索了很多

发生了两件事

1) 我最终写了上面的代码(没有问题没有错误,完美运行)

2) 我发现在 htmlOptions 中 selected="selected" 的优先级较低,因此它会被覆盖并自动从所有 option 标签中删除

更进一步,如果我用 ['disabled' => 'disabled'] 替换 ['selected' => 'selected'] 它有效并且所有 option 标签在列表框中被禁用....因为 disabled 有更高的优先级,因此它被推送到 option 标记中,但 selected 属性不会被推送,因为它的优先级较低。

有人知道如何解决这个问题吗?

我在其中一个 yii 论坛上发现了 yii 本身的错误。所以想和大家分享一下。

如果你这样写

['selected' => 'selected'];

没用。

但是如果你这样写的话

['selected ' => 'selected']; or true

选择后考虑space。 ['selected ' 如果你只是在选择后放一个 space 它就完美了。

不知道这是为什么。但它有效。