好吧,我觉得我在这里疯了.我正在使用select2
jquery插件(版本4),并通过ajax检索数据.因此,您可以键入名称,它将返回该联系信息.但我也希望回复联系人所属的组织.
这是我的select2初始化:
$('#contact_id').select2({ ajax: { url: 'example.com/contacts/select',dataType: 'json',delay: 250,data: function (params) { return { q: params.term,page: params.page }; },processResults: function (data) { return { results: data }; },cache: true },minimumInputLength: 3,maximumSelectionLength: 1 });
这是我要返回的数据(laravel框架):
foreach($contacts as $con) { $results[] = [ 'id' => $con->contact_id,'text' => $con->full_name,'org' => [ 'org_id' => $con->organization_id,'org_name' => $con->org_name ] ]; } return response()->json($results);
那么’org’是不应该通过select2附加到创建的选项或select元素?所以我可以做一些像$(‘#contact_id’).select2().find(‘:selected’).data(‘data’).org或$(‘#contact_id’).select2().data(‘数据’)..org或类似的东西?
理想情况下,这看起来像:
<select> <option value="43" data-org="{org_id:377,org_name:'Galactic Empire'}">Darth Vader</option> </select>
我发誓我上周确认这个工作,但现在它完全无视那个组织财产.我已经确认返回的json数据确实包含org和正确的org_id和org_name.我无法在网上挖掘任何东西,只有documentation的这个片段:
The id and text properties are required on each object,and these are the properties that Select2 uses for the internal data objects. Any additional paramters passed in with data objects will be included on the data objects that Select2 exposes.
所以有人可以帮我这个吗?我已经浪费了几个小时了.
编辑:由于我没有得到任何响应,我目前的计划是使用processResults回调来生成隐藏的输入字段或JSON块,我稍后将在我的代码中引用.考虑到这种情况,我觉得这是一个hacky解决方案,但如果没有别的办法,那就是我要做的.我宁愿那样做另一个ajax调用来获得组织.当我开始实施它时,我会发布我的解决方案.
解决方法
现在不能发表评论(声望很低)..所以…回答光滑:
包括其他数据(v4.0):
processResults: function (data) { data = data.map(function (item) { return { id: item.id_field,text: item.text_field,otherfield: item.otherfield }; }); return { results: data }; }
阅读数据:
var data=$('#contact_id').select2('data')[0]; console.log(data.otherfield);