ajax – 验证后Laravel Select2旧输入
我在我的webapplication中使用Select2.我用Ajax加载我的Select2框.验证失败时,除Select2框之外,所有输入都按照之前的方式填充.如何在表单验证失败后恢复旧值?我的赌注是使用Request :: old(‘x’),但这会插入值(在我的情况下是用户ID)而不是所选文本.因此,例如约翰将在选择框中变为27.我怎样才能收回文字?
<select id="customer" name="customer" class="searchselect searchselectstyle"> </select> js: 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框中讨论数千行,这将是非常低效的. 我想必须有一个更好的解决方案.谁能帮我?
通常以编程方式设置select2的值,您可能希望使用.val()方法,后跟.trigger(‘change’)调用
as per their documentation(和
other queries like this on SO).但是,select2本身在他们的文档中有关于
preselecting options for remotely sourced data的内容.
基本上他们的建议归结为(在初始化你的AJAX驱动< select>)之后: >使用预先选择的ID对新的API端点进行另一次AJAX调用 >也可以使用一些常规的jQuery回调链接函数 >触发更改事件 假设您已经以各种方式将旧数据闪存到会话,Laravel provides handy access to the previously requested input,特别是这三个: >通过Request类进行静态访问,例如在OP中请求:: old(‘customer’) 全局辅助方法更常被建议在Blade模板中使用,就像在这里的一些其他答案中一样,当你不需要操作值并且可以直接将其插回时,它非常有用,你可以使用文字输入. 最后一种方法可能为您提供了您正在寻找的答案 – 而不是从视图内部查询整个集合,您可以从控制器中操作集合(类似于OP,但是应该更好,因为它不是在视图中解析它)或者根据旧ID从控制器发出另一个查询并获取所需的数据而不必搜索集合(更少的开销): $old_customer = Customer::find($request->old('customer')); 无论哪种方式,在刀片模板处理任何内容之前,您都可以在指尖(作为视图变量)获得特定数据. 但是,如果您选择注入数据,它仍将遵循select2建议的模式: >获取预先选择的数据 唯一的区别是您不需要从另一个API端点获取数据(除非您需要/需要其他程序原因). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |