--- tags: javascript --- # Select2 - jQuery Plugin 說明如何使用Select2套件來實現豐富的下拉選單功能,如單選.多選.可搜尋選項.動態新增選項等 [官網說明](https://select2.org/) ## 安裝套件 Step 0.確保先前已匯入jQuery函式庫 Step 1.匯入CSS和JS檔案,如下: <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet" type="text/css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script> 如果使用的是AdminLTE皮膚,可直接匯入內含的CSS和JS檔案,範例如下: ``` <script src="{{asset('bower_components/select2/dist/js/select2.full.min.js')}}"></script> <link href="{{asset('bower_components/select2/dist/css/select2.min.css')}}" rel="stylesheet" type="text/css"> ``` Step 2.針對select元素呼叫單一函式,指令如下: $(document).ready(function(){ $('.select2').select2(); }); ## 選項設定方法 可在參數內以物件形式帶入所需參數,如範例: var select = $('.select2').select2({ placeholder: '請選擇' }); ### 相關選項說明 * allowClear 是否出現清除內容的x按鈕,設定值為true/false,預設為false * closeOnSelect 是否當選取選項後,自動關閉下拉選單,設定值為true/false,預設為true * data 值為物件陣列,允許利用陣列來渲染選項 * debug 是否顯示除錯訊息,顯示在console,預設為false * disabled 是否無法被控制,預設為false * multiple 是否支持多選,預設為false * placeholder 當未選取任何選項時的提示文字 * tags 是否支持新增選項 ### 單選輸入項設計 建議使用Form套件生成輸入項,範例如下,參數依序為:元素name.選項陣列.預設選項.其他屬性陣列 `{!! Form::select('cgy_id',$cgys,null,['id'=>'cgy_id','class'=>'form-control']) !!}` 由Controller回傳的選項key.value陣列,做法如下: ``` //使用pluck(),回傳所有資料的name和id欄位,以key.value陣列形式 $cgys = \App\Cgy::pluck('name','id'); return view('items.edit',compact('item','cgys')); ``` ### 多選輸入項設計 同樣建議使用Form套件生成輸入項,與單選類似,不同在於name後面要加上[],回傳值才會是陣列,另外要加上multiple屬性 `{!! Form::select('cgy_id[]',$cgys,null,['id'=>'cgy_id','class'=>'form-control','multiple']) !!}` 如果希望多一個清除所有選項的按鈕,可以加上在呼叫select2()時加上allowClear,如下示範: ``` $('#cgy_id').select2({ allowClear: true, }); ``` ### implode與explode 為了要存入多選的內容,所以將Item的cgy_id欄位改成字串,將選項以逗號隔開的形式來儲存。因為常需要在字串和陣列間轉換就會用到 explode()和implode(),說明如下: 回傳陣列 = explode(分隔的字串,要處理的字串); 回傳字串 = implode(分隔的字串,要處理的陣列);