代码之家  ›  专栏  ›  技术社区  ›  detinu20

在jquery自动完成中设置值

  •  0
  • detinu20  · 技术社区  · 7 年前

    我正在使用jquery autocomplete作为城市的输入框,但是当我发送输入时,它会发送所选城市的名称而不是id,如何发送id,但在使用autocomplete时仍显示名称?

    因此,本质上,我希望autocomplete类似于:

    <-选项值=“{{$city->id}}“>{{城市->名称}}<-/选项->

    这是我目前的代码:

            <div class="search-homepage-input">
                {!! Form::open(['route' => 'search.index', 'method' => 'GET']) !!}
                <div class="col-md-9">
                {!! Form::text('city', null, array('class' => 'form-control', 'maxlength' =>'55', 'placeholder' => 'Eg. England, London, Manchester', 'id' => 'sl')) !!}
                </div>
                <div class="col-md-3">
                    {!! Form::submit('Find Teams', array('class' => 'btn btn-homepage'))  !!}
                </div>
                {!! Form::close() !!}
            </div>
    

    PHP(Laravel):

     public function autoComplete(Request $request){
    
        $query = $request->term;
        $res = City::where('name', 'LIKE', "%$query%")->orderBy('name')->paginate(5);
        foreach($res as $cities ){
            $usersArray[] = $cities->name;
        }
        return response()->json($usersArray);
    }
    

    JS:

     $('#sl').autocomplete({
                source: '/autocomplete'
            })
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Community Mohan Dere    6 年前

    我想你应该做如下的事情:

    public function autoComplete(Request $request){
      $query = $request->term;
      $res = City::where('name', 'LIKE', "%$query%")->orderBy('name')->paginate(5);
      foreach($res as $cities ){
        $usersArray[] = array(
          "label" => $cities->name,
          "value" => $cities->id
        );
      }
      return response()->json($usersArray);
    }
    

    查看以下页面: http://api.jqueryui.com/autocomplete/#option-source

    数组: 一 array 可用于本地数据。支持两种格式:

    • 字符串数组: [ "Choice1", "Choice2" ]
    • 具有标签和值属性的对象数组: [ { label: "Choice1", value: "value1" }, ... ]

    Array [
      Object {
        "label": "City",
        "value": id
      }
    ];
    

    希望有帮助。

    更新

    当用户进行选择时,它使用 select 回拨。在上面的示例中 label value 归因于 价值 所选项目的名称。这可以在这里看到: http://jqueryui.com/autocomplete/#custom-data

    使用自动完成代码,这可能看起来像:

    HTML

    <div class="search-homepage-input">
      {!! Form::open(['route' => 'search.index', 'method' => 'GET']) !!}
      <div class="col-md-9">
        {!! Form::text('city-name', null, array('class' => 'form-control', 'maxlength' =>'55', 'placeholder' => 'Eg. England, London, Manchester', 'id' => 'sl-label')) !!}
        {!! Form::text('city-id', null, array('class' => 'form-control', 'id' => 'sl-id', 'style' => 'display: none;') !!}
      </div>
      <div class="col-md-3">
        {!! Form::submit('Find Teams', array('class' => 'btn btn-homepage'))  !!}
      </div>
      {!! Form::close() !!}
    </div>
    

    JavaScript

    $('#sl').autocomplete({
      source: "/autocomplete",
      focus: function(event, ui) {
        $("#sl-label").val(ui.item.label);
        return false;
      },
      select: function(event, ui) {
        $("#sl-label").val(ui.item.label);
        $("#sl-id").val(ui.item.value);
        return false;
      }
    });
    

    通过这种方式,您可以收集要用于搜索的ID。

    推荐文章