新手,不擅长写js,只是分享一下我遇到的问题,供大家参考。select2插件是一个带有搜索功能的下拉选择框。只需使用composer来安装它。使用时先参考header中的插件usekartik\select2\Select2;如果表单是ActiveForm,可以使用下面的代码data=[2=>'widget',3=>'dropDownList',4=>'yii2'];$form->field($model,'title')->widget(Select2::classname(),['data'=>$data,'options'=>['placeholder'=>'请选择...'],]);如果你的表单不是ActiveForm,可以参考下面的Select2::widget(['name'=>'title','data'=>$data,'options'=>['placeholder'=>'Pleaseselect...']]);非ActiveFomr产生的update数据时需要默认选择,这很容易做到,只需添加valueSelect2::widget(['name'=>'title','value'=>2,'data'=>$data,'options'=>['placeholder'=>'请选择...']]);如果要实现多选,在options中添加多选,即Select2::widget(['name'=>'title','value'=>2,'data'=>$data,'options'=>['multiple'=>true,'placeholder'=>'请选择...']]);在实际项目中,我直接从model层获取数据,并添加id$form->field($model,'back_reason')->widget(Select2::classname(),['name'=>'search','value'=>isset($params['company_id'])?$params['company_id']:'','data'=>\yii\helpers\ArrayHelper::map(\app\models\BackReason::find()->where(['level'=>\app\models\BackReason::LEVEL_2])->asArray()->all(),'id','reason'),'options'=>['placeholder'=>'拒绝原因搜索','style'=>'width:110px;','id'=>'searchreason',],'pluginOptions'=>['allowClear'=>true,'width'=>'220px',],])一般情况下这个可以用,但是如果在bootstrap模态框里使用select2插件,会出现无法输入的问题,该插件一直无法获取焦点1.首先查看主div中是否有tabindex="-1"2.重写enforceFocus方法如果要实现异步搜索功能1.视图层,代码可以直接复制使用,唯一需要修改的是ajax中对应的url地址usekartik\select2\Select2;useyii\web\JsExpress离子;field($model,'title')->widget(Select2::classname(),['options'=>['placeholder'=>'请输入标题名称...'],'pluginOptions'=>['placeholder'=>'search...','allowClear'=>true,'language'=>['errorLoading'=>newJsExpression("function(){return'Waiting...';}"),],'ajax'=>['url'=>'这里是提供数据源的接口','dataType'=>'json','data'=>newJsExpression('function(params){return{q:params.term};}')],'escapeMarkup'=>newJsExpression('function(markup){returnmarkup;}'),'templateResult'=>newJsExpression('function(res){returnres.text;}'),'templateSelection'=>newJsExpression('function(res){returnres.text;}'),],]);?>2。controller层负责提供数据公共函数actionSearchTitle($q){\Yii::$app->response->format=\yii\web\Response::FORMAT_JSON;$out=['results'=>['id'=>'','text'=>'']];如果(!$q){返回$out;}$data=Article::find()->select('id,titleastext')->andFilterWhere(['like','title',$q])->limit(50)->asArray()->所有();$out['results']=array_values($data);返回$out;}
