使用Laravel框架中的select2库对选择框进行自动搜索。
我的选择框代码:
<div class="col-lg-4 col-md-6 mb-3" id="zipblock">
<select class="form-control" id="contactzipcode" name='contactzipcode' disabled>
<option value=''>--Zip Code--</option>
@if(isset($zips)) @foreach ($zips as $zipnew)
<option value="{{ $zipnew->zip_id }}" {{( isset($zip_id) && $zipnew->zip_id == $zip_id) ? 'selected' : '' }}>{{ $zipnew->zip_code }}</option>
@endforeach @endif
</select>
</div>
我的脚本是:
$('#contactzipcode').select2({
ajax: {
delay: 250,
url: APP_URL + '/load_zip',
type: "post",
dataType: 'json',
data: function(params) {
return {
_token: $('meta[name="csrf-token"]').attr('content'),
search: params.term,
};
},
processResults: function(data) {
console.log(data);
return {
results: $.map(data, function(item) {
return {
text: item.zip_code,
id: item.zip_id,
}
})
};
},
cache: true
},
});
我的加载选项控制器是:
public function loadZip(Request $request)
{
$zip_codes=[];
if(isset($request->search) && $request->search!=null){
$zip_codes = ZipCode::select('zip_code','zip_id')->where('zip_code','like', '%' . $request->search . '%')->take(100)->get();
}
return response()->json($zip_codes);
}
我面临的问题是,选项只有在搜索后才可见,而选择框值选项在那里,但对用户不可见。只加载AJAX结果。
控制器代码有问题如果您没有获得搜索参数,则存在空数组
试试这个
$search = $request->search;
if($search == ''){
$user = User::orderby('name','asc')
->select('id','name')->limit(5)->get();
}else{
$user = User::orderby('name','asc')
->select('id','name')
->where('name', 'like', '%' .$search . '%')
->limit(5)->get();
}