Javascript 在Laravel 5.4中重新加载视图后,如何保留表单中的所有过滤器?
我在视图中有以下表格:Javascript 在Laravel 5.4中重新加载视图后,如何保留表单中的所有过滤器?,javascript,php,laravel,Javascript,Php,Laravel,我在视图中有以下表格: <form class="form-inline" method="POST" action="{{route('dsp.report')}}"> @csrf <!-- {{ csrf_field() }} --> <div class="col-sm-2 form-group"> <label>Range one: &l
<form class="form-inline" method="POST" action="{{route('dsp.report')}}">
@csrf <!-- {{ csrf_field() }} -->
<div class="col-sm-2 form-group">
<label>Range one: </label><input type="text" class="form-control" id="date_from" name="date_from" placeholder="Date from range">
</div>
<div class="col-sm-2 form-group">
<label>Range two: </label><input type="text" class="form-control" id="date_to" name="date_to" placeholder="Date to range">
</div>
<div class="col-sm-2 form-group">
<label>Filter by SSP: </label><select name="ssp_id[]" id="ssp" class="form-control-lg select2" multiple="multiple"></select>
</div>
<div class="col-sm-2 form-group">
<label>Filter by DSP: </label><select name="dsp_id[]" id="dsp" class="form-control-lg select2" multiple="multiple"></select>
</div>
<div class="col-sm-2 form-group">
<label>Group by: </label>
<select class="form-control" name="groupby">
<option>SSP/DSP</option>
<option>SSP</option>
<option>DSP</option>
</select>
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
我怎么做?有什么简单的解决办法吗
UPD:要明确在基于select2的多下拉菜单中保留值(而不是键),请选择:
首先,我们在查找SSP术语时触发此控制器:
public function get_ssp(Request $request) {
$term = $request->get('term');
$ssp_list = SspCompanyList::where('ssp_company_name', 'LIKE', '%'. $term['term'] .'%')
->get(['ssp_company_id as id', 'ssp_company_name as text']);
return ['results' => $ssp_list];
}
然后我们在提交后在控制器中处理所选ID。Select2的配置方式如下:
$(document).ready(function() {
$('#ssp').select2({
width: '200px',
minimumInputLength: 3,
ajax: {
url: '{{ route("get_ssp") }}',
dataType: 'json',
type: "POST",
quietMillis: 50,
data: function (term) {
return {
term: term
};
},
},
});
});
<select name="ssp_id[]" id="ssp" class="form-control-lg select2" multiple="multiple">
@if (is_array(old('ssp_id')))
@foreach (old('ssp_id') as $ssp_id)
{{ $ssp_name = \App\Models\SspCompanyList::select('ssp_company_name')->where('ssp_company_id', $ssp_id)->first()->ssp_company_name }}
<option value="{{ $ssp_name }}" selected="selected">{{ $ssp_name }}</option>
@endforeach
@endif
</select>
let arrayOfSelectedValues = [] // You can keep your selected values here if you know them already
$('#ssp').select2({
width: '200px',
minimumInputLength: 3,
ajax: {
url: '{{ route("ssp") }}',
dataType: 'json',
type: "POST",
quietMillis: 50,
data: function (term) {
return {
term: term
};
},
},
}).val(arrayOfSelectedValues).trigger("change"); // Then add the selected values to the select2() initialisation
但问题是select2只发送ssp_id[]中的id,而不是键值项,并且在发送之前无法将它们从old()函数中恢复为项名称
UPD2:
我正试图以这种方式解决这个问题:
$(document).ready(function() {
$('#ssp').select2({
width: '200px',
minimumInputLength: 3,
ajax: {
url: '{{ route("get_ssp") }}',
dataType: 'json',
type: "POST",
quietMillis: 50,
data: function (term) {
return {
term: term
};
},
},
});
});
<select name="ssp_id[]" id="ssp" class="form-control-lg select2" multiple="multiple">
@if (is_array(old('ssp_id')))
@foreach (old('ssp_id') as $ssp_id)
{{ $ssp_name = \App\Models\SspCompanyList::select('ssp_company_name')->where('ssp_company_id', $ssp_id)->first()->ssp_company_name }}
<option value="{{ $ssp_name }}" selected="selected">{{ $ssp_name }}</option>
@endforeach
@endif
</select>
let arrayOfSelectedValues = [] // You can keep your selected values here if you know them already
$('#ssp').select2({
width: '200px',
minimumInputLength: 3,
ajax: {
url: '{{ route("ssp") }}',
dataType: 'json',
type: "POST",
quietMillis: 50,
data: function (term) {
return {
term: term
};
},
},
}).val(arrayOfSelectedValues).trigger("change"); // Then add the selected values to the select2() initialisation
@if(是_数组(旧('ssp_id'))
@foreach(旧(‘ssp_id’)作为$ssp_id)
{{$ssp_name=\App\Models\ssp公司列表::选择('ssp_公司名称')->其中('ssp_公司id',$ssp_id)->first()->ssp_公司名称}
{{$ssp_name}
@endforeach
@恩迪夫
在第一次重新加载后,它工作并保留我需要的ssp名称,但在第二次尝试在同一页面上为下面的dsp选择值并再次提交后,它返回此错误:
正在尝试获取非对象的属性“ssp\u company\u name”(视图:
/home/pavel/projects/dsp/resources/views/dsp/index.blade.php)
那么,为什么第一次有效,第二次无效呢?对于select2,我们是否应该以其他方式处理它?将属性值添加到所有输入中,如下所示:
<input type="text" name="username" value="{{ old('username') }}">
检查文档以便更好地理解注意:
您忘记在选择选项上添加值属性
对于普通输入字段,可以使用old('Input\u name')将旧值传递给它。
例如:
<input name="input_name" value="{{ old('input_name') }}" />
您的代码变成:
<form class="form-inline" method="POST" action="{{route('dsp.report')}}">
@csrf <!-- {{ csrf_field() }} -->
<div class="col-sm-2 form-group">
<label>Range one: </label>
<input type="text" class="form-control" id="date_from" name="date_from" value="{{ old('date_from') }}" placeholder="Date from range">
</div>
<div class="col-sm-2 form-group">
<label>Range two: </label>
<input type="text" class="form-control" id="date_to" name="date_to" value="{{ old('date_to') }}" placeholder="Date to range">
</div>
<div class="col-sm-2 form-group">
<label>Filter by SSP: </label>
<select name="ssp_id[]" id="ssp" class="form-control-lg select2" multiple="multiple"><option></option></select>
</div>
<div class="col-sm-2 form-group">
<label>Filter by DSP: </label>
<select name="dsp_id[]" id="dsp" class="form-control-lg select2" multiple="multiple"><option></option></select>
</div>
<div class="col-sm-2 form-group">
<label>Group by: </label>
<select class="form-control" name="groupby">
<option {{ old('groupby') == "SSP/DSP" ? 'selected' : '' }} value="SSP/DSP">SSP/DSP</option>
<option {{ old('groupby') == "SSP" ? 'selected' : '' }} value="SSP">SSP</option>
<option {{ old('groupby') == "DSP" ? 'selected' : '' }} value="DSP">DSP</option>
</select>
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
您可以使用会话存储筛选器数据,也可以在刀片模板中使用会话数据。select2如何选择?flash()/old()对的用法是相同的还是不同的?是的,Select2也可以选择。“value=”some value“-如果我们从本地控制器远程下载值,但不知道确切的值?还有另一个问题——这是一个我们必须以某种方式解包的多重列表。我们应该在blade模板中为此运行foreach吗?很抱歉,我不明白“从本地控制器远程下载值”是什么意思。我的意思是,我们通过laravel controller从本地数据库通过ajax获取select2的这些id/文本对,触发具有类似“%pattern%”sql请求的模型。