在jQuery自动完成中设置值

时间:2018-11-18 17:53:03

标签: jquery laravel jquery-ui laravel-5 autocomplete

我正在对城市的输入框使用jquery自动完成功能,但是当我发送输入时,它会发送所选城市的名称而不是ID,我如何发送ID但在使用自动完成功能时仍显示名称?

所以从本质上讲,我希望自动完成功能像这样:

<-option value =“ {{$ city-> id}}”> {{city-> name}} <-/ option->

这是我当前的代码:

HTML:

discord.User

PHP(Laravel):

        <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>

JS:

 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);
}

1 个答案:

答案 0 :(得分:1)

我认为您想执行以下操作:

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" }, ... ]
  •   

所以您想返回JSON,如:

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

希望有帮助。

更新

用户进行选择时,它使用select回调。在上面的示例中,显示了label,用户选择了它。然后,将value属性设置为所选项目的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。