JQuery自动完成 - 显示多个值

时间:2018-04-29 14:40:46

标签: javascript php jquery laravel autocomplete

我想在自动完成框中显示多个值 在我的理解中,JQuery自动完成使用键“值”作为默认值来显示框中的文本 但我想显示搜索结果中得到的“值”,“公司”和“标签”键 这就是我所拥有的:

我的数据库查询 - 此处仅使用 'value'=> $ product-> title

public function autoComplete(Request $request) {
    $query = $request->get('term','');

    $products = Products::where('title', 'LIKE', '%' . $query . '%')
                      ->orWhere('company', 'LIKE', '%'. $query .'%')
                      ->orWhere('tags', 'LIKE', '%'. $query .'%')
                      ->get();


    $data=array();
    foreach ($products as $product) {
            $data[]=array('id'=>$product->id, 
                          'value'=>$product->title, 
                          'company'=>$product->company, 
                          'tags'=>$product->tags);

    }
    if(count($data))
         return $data;
    else
        return ['value'=>'No Result Found','id'=>''];
}

我的JQuery自动完成脚本

<script>
$(function()
{
     $( "#search_text" ).autocomplete({
      source: "{{ route('searchajax') }}",
      minLength: 1,
      select: function(event, ui) {
        $('#search_text').val(ui.item.value);
      },
    open : function(){
      $(".ui-autocomplete:visible").css({top:"+=13"});
    },
    });
});

我的输入字段

<div class="col">
<input class="form-control form-control-lg form-control-borderless ui-autocomplete-input" 
id="search_text" 
type="search" 
name="q" 
value="{{ isset($s) ? $s : '' }}" 
placeholder="Search for Titles, Companys or Tags" 
autocomplete="off" />

如果有帮助,我会将Laravel用于此项目。

2 个答案:

答案 0 :(得分:0)

操纵“价值”并不是最容易的。现场服务器端获得所需的结果?例如像这样

'value'=>$product->title.', '.$product->company.', '.$product->tags); 

答案 1 :(得分:0)

我自己在帮助下找到了解决方案 JQueryUI Documentation

我不得不操纵 renderItem()扩展点 现在这是我的脚本,完美无缺:

<script>
$(function()
{
     $( "#search_text" ).autocomplete({
      source: "{{ route('searchajax') }}",
      minLength: 1,
      select: function(event, ui) {
        $('#search_text').val(ui.item.value);

      return false;
      },
    open : function(){
      $(".ui-autocomplete:visible").css({top:"+=13"});
    },
    })
  .autocomplete( "instance" )._renderItem = function( ul, item ) {
    return $( "<li>" )
      .append( "<div><strong>" + item.value + "</strong><br>" + item.company + "</div>" )
      .appendTo( ul );
  };
});