我在我的 Web 应用程序中使用 Select2。我使用 Ajax 加载我的 Select2 框。当验证失败时,除了 Select2 框之外,所有输入都填充为之前的值。那么在表单验证失败后如何恢复旧值呢?我尝试使用 Request::old('x')
,但它会插入值(在我的情况下是用户 ID),而不是选定的文本。因此,例如文本 John
将变成选择框中的 27
。如何获取文本?
<select id="customer" name="customer" class="searchselect searchselectstyle">
</select>
JavaScript代码:
token = '{{csrf_token()}}';
$(".searchselect").select2({
ajax: {
dataType: "json",
type: "POST",
data: function (params) {
return {
term: params.term,
'_token': token,
'data' : function(){
var result = [];
var i = 1;
$('.searchselect').each(function(){
result[i] = $(this).val();
i++;
});
return result;
}
};
},
url: function() {
var type = $(this).attr('id');
return '/get' + type;
},
cache: false,
processResults: function (data) {
return {
results: data
};
}
}
});
编辑
到目前为止我发现的唯一(肮脏)的解决方案如下:
<select id="customer" name="customer" class="searchselect searchselectstyle">
@if(Request::old('customer') != NULL)
<option value="{{Request::old('customer')}}">{{$customers->where('id', intval(Request::old('customer')))->first()->name}}</option>
@endif
</select>
$customers
是所有客户的列表,这意味着对于每个 Select2 框,我需要查询一大堆项目才能使其工作。如果我们谈论每个 Select2 框有数千行,那么这将非常低效。
我猜一定有更好的解决方案。谁可以帮助我?
url:function(){}
在验证失败后页面重定向时被调用,但您打算如何停留在select2预选择框? - Shiro