如何正确地使用多个过滤器来自动完成搜索输入?

约翰·W

我有一个上下文,那里有一个存储会议的会议表。会议表具有“名称”列和“城市”列。

我有一个输入类型的文本,用户应该可以搜索会议名称,也可以搜索将在特定城市举行的会议。

为了更好地解释:用户在输入文本中输入“ Ne”。因此,它应该显示与会议名称相关的结果,也应与城市名称相关。如果用户单击会议名称,则应将其重定向到会议详细信息页面。如果他单击某个城市,则应在会议表的“城市”列中显示将其单击的城市作为值的会议。

在此处输入图片说明

您知道如何实现吗?目前,仅在输入搜索中显示会议的一部分。

我为此上下文创建了一个AutocompleteController:

class AutocompleteController extends Controller
{

    public function search(Request $request){
        $search = $request->term;
        $conferences = Conference::where('name', 'LIKE', '%'.$search.'%')->get();

        $data= [];
        foreach ($conferences as $key => $value){
            $data[] = ['id'=> $value->id, 'value' => $value->name . " " . $value->name];
        }
        return response($data);
    }
}

转到上述方法:

Route::get('/autocomplete-search', 'AutocompleteController@search');

jQuery的:

$("#search").autocomplete({
   source: "{{ URL::to('autocomplete-search') }}",
   minLength: 2,
   select:function(key, value)
   {
       console.log(value);
   }
});

搜索输入:

<div class="col col-md-6">
    <h4 class="text-white  text-center font-weight-bold">Search</h4>
    <form class="main-search">
        <input type="text" id="search" class="autocomplete dropdown-toggle" placeholder="Conference, Citiy, Category">
    </form>
</div>

会议桌:

   conferences table

    id | name | city | ...

     1 |  New conference 1  | Newcastle
     2 |  New conference 2  | Newcastle
     3 |  old conference 1  | Bristol
     4 |  old conference 2  | Glasgow
耶里波

您将必须搜索城市,并将类别属性添加到要发送到自动完成功能的数据中。

我对数据库访问并不完全熟悉,因此如果不能百分百正确地道歉,我深表歉意。

class AutocompleteController extends Controller
{

    public function search(Request $request){
        $search = $request->term;
        $conferences = Conference::where('name', 'LIKE', '%'.$search.'%')->get();

        $cities = Conference::where('city', 'LIKE', '%'.$search.'%')->get();

        $data= [];
        foreach ($conferences as $key => $value){
            $data[] = ['category'=> 'Conference', 'value' => $value->name, 'url' = 'conferenceUrl'];
        }

        foreach ($cities as $key => $value){
            $data[] = ['category'=> 'City', 'value' => $value->city, 'url' = 'cityUrl'];
        }
        return response($data);
    }
}

然后,您将不得不稍微更改自动完成功能。为此,您可以使用类别自动完成示例。

$.widget( "custom.catcomplete", $.ui.autocomplete, {
      _create: function() {
          this._super();
          this.widget().menu( "option", "items", "> :not(.ui-autocomplete-category)" );
      },
      _renderMenu: function( ul, items ) {
        var that = this,
          currentCategory = "";
        $.each( items, function( index, item ) {
          var li;
          if ( item.category != currentCategory ) {
            ul.append( "<li class='ui-autocomplete-category'>" + item.category + "</li>" );
            currentCategory = item.category;
          }
          li = that._renderItemData( ul, item );
          if ( item.category ) {
            li.attr( "aria-label", item.category + " : " + item.label );
          }
        });
      }
    });


$("#autocomplete").catcomplete({
  source: [{
      value: "New conference abcd",
      label: "New conference abcd",
      url: "NewConferenceUrl",
      category: "Conference"
    },
    {
      value: "Newcastle",
      label: "Newcastle",
      url: "NewcastleUrl",
      category: "City"
    }
  ],
  select: function(event, ui) {
    console.log("Redirecting to " + ui.item.category + ": " + ui.item.url);
  }
});
.ui-autocomplete-category {
    font-weight: bold;
    padding: .2em .4em;
    margin: .8em 0 .2em;
    line-height: 1.5;
  }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
<link rel="stylesheet" type="text/css" href="https://code.jquery.com/ui/1.12.0/themes/smoothness/jquery-ui.css">

<div>
  <input id="autocomplete">
</div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

搜索使用多个过滤器与Java流列表

清除搜索输入字段后,如何从搜索过滤器隐藏列表项?

如何使用ffmpeg应用多个过滤器和输入

ldapsearch如何使用多个过滤器?

如何在表格中使用angularjs搜索过滤器

如何在JQUERY中过滤搜索输入以显示正确的自动完成功能?

如何使用过滤器搜索数组中对象的多个键值?

jQuery自动完成过滤器表的输入字段

如何从表格外部使用搜索过滤器?

Django过滤器,如何使多个字段搜索?(使用django-filter!)

我如何使用jquery的搜索过滤器

使用钩子的输入搜索过滤器数组

仅当输入3个字符时如何使过滤器/搜索栏搜索?

使用需要多个输入的过滤器-Haskell

如何使用输入过滤器在Div上进行实时搜索

使用输入和DIV搜索过滤器

MySQL查询来自多个表的搜索过滤器

如何使用多个过滤器在Twitter上搜索用户?

如何使用VBA处理自动过滤器

使用输入过滤器在 Div 上进行实时搜索

如何使用选项组重置材质自动完成中的自定义过滤器

如何正确拥有具有多个过滤器的搜索页面?

如何使用动作过滤器更改输入参数

如何使用 Spring + Hibernate + MySQL 实现搜索过滤器?

如何在php中实现多个搜索过滤器

如何创建具有多个过滤器的搜索栏?

Appmaker:来自表格搜索栏的多个过滤器?

如何在 React 中正确地自动完成

如何在 ElasticSearch 中正确使用“术语”过滤器?