一、前言
根据需求,需要更改下拉框为多选框。本来以为只是很简单的东西,但是实际修改起来却碰到不少bug,多选框无法选中,给多选框赋默认值等。这里记录一下
二、修改单选下拉框为多选下拉框
echo $form->field($model, 'project_id', ['inputOptions' => ['multiple' => 'multiple',//这里加上'style'=>'width:100%;','size'=>10],])->dropDownList(数组);
三、多选下拉框无法选中的问题
明明这个插件已经显示是多选框了,但是我每次多选的时候,他都会自动取消,始终都是保持单选的状态。后来一直找问题,终于发现,原因是yii自带的activeForm.js
会自动验证,因为默认是选一个,所以在选两个的时候会报错。
既然知道原因了,那解决方案也很简单,就是禁用activeForm.js (yii/assets/activeForm.js)
,因为博主的这个页面,禁用掉activeForm.js
也没问题,所以博主才禁用的。大家根据自己的实际情况灵活选择吧。
$form = ActiveForm::begin(['id' => $model->formName(),'enableAjaxValidation' => false,'enableClientScript' => false, //禁用yii自带的activeForm.js'enableClientValidation' => false, //禁用yii自带的activeForm.js
参考链接:/question/229
禁用之后,我们的多选框就能正常多选,传值了。打印传值方式为:
array(5) {[0]=>string(2) "11"[1]=>string(2) "12"[2]=>string(1) "5"[3]=>string(1) "2"[4]=>string(1) "1"}
四、给下拉框默认值
这部分博主在网上百度了很久,刚开始很多人都说设置prompt
就可以了,后来才发现,这个prompt
只是设置下拉框的默认头部文字,并不是我们想要的。我们想要的是,下拉框的有些值从一开始就是被selected的。
1、通过$model赋值
$model->name = 2; //把value = 2的设为默认值,这里的name必须和下面的field里面的name保持一样echo $form->field($model, 'name', ['inputOptions' => ['multiple' => 'multiple',//这里加上'style'=>'width:100%;','size'=>10],])->dropDownList(数组);
2、赋多个默认值
echo $form->field($model, 'project_id', ['inputOptions' => ['multiple' => 'multiple',//这里加上,成为多选框'style'=>'width:100%;',],])->dropDownList(数组,['options' => ['3' => ['selected' => 'selected'],'4'=>['selected'=>'selected']],]);
这里是给了个options参数,里面可以是个数组,对应的就是我们要给默认值的选项。
效果如图:
这样,我们的下拉框就自带的有默认值了,挺方便的,个人更推荐第二种吧,给多个默认值,看着也顺眼些。
end