9

我有一个用自动完成实现的文本框。就这个。

<input id="txtcity" />
$("#txtcity").autocomplete({
  source: function (request, response) {
    $.ajax({
      url: '@Url.Action("CityLookup", "PatientDemographic", "")', type: "POST", dataType: "json",
      data: { searchText: request.term, maxResults: 10 },
      success: function (data) {
        response($.map(data, function (item) {
          return { label: item.Text, value: item.Text, id: item.Value }
        }))
      }
    })
  },
  select: function (event, ui) {
    $("#CityCode").val(ui.item.id);
  },
  open: function () {
    $(this).removeClass("ui-corner-all").addClass("ui-corner-top");
  },
  close: function () {
    $(this).removeClass("ui-corner-top").addClass("ui-corner-all");
  }
});

这将返回三个结果,比如说“Apple”、“Banana”、“Cabbage”。渲染时如何将默认值设置为“香蕉”?即,文本=“香蕉”值=“2”?

4

5 回答 5

17

您可以在初始化自动完成后设置这样的值:

$( "#txtcity" ).autocomplete({
  // do whatever
}).val('Banana').data('autocomplete')._trigger('select');

更新示例:http: //jsfiddle.net/55jhx/1/

于 2013-06-12T07:47:33.190 回答
3

更改以下行

 $('#txtcity').val() = item.value;

 $('#txtcity').val(item.text);
于 2013-06-12T07:29:44.880 回答
1

触发对中第一个元素的单击以触发ul自动完成选择:

$("ul.ui-autocomplete li").first().trigger("click");
于 2016-08-27T21:58:03.697 回答
0

我试过了:

$( "#txtcity" ).autocomplete({
  // do whatever
}).val('Banana').data('autocomplete')._trigger('select');

它没有按预期工作。它会自动选择该值,但结果为null.

所以我只是尝试:

$( "#txtcity" ).autocomplete({
  // do whatever
}).val('Banana')

这选择了值,但不是null

于 2020-03-24T21:45:22.750 回答
0

我已经使用 __response() 方法解决了这个问题。希望这对寻找解决方案的人有所帮助。

$( 'selector' ).autocomplete( 'instance' ).__response = function(a) {
    let defaultValue = {
        label : 'Not found',
        value : null
    }
    if( a.length === 0 ) {
        a.push( $instance.elements.defaultValue ); 
    } else {
        a.unshift( $instance.elements.defaultValue ); 
    }
    a && (a = this._normalize(a)), this._trigger("response", null, {
        content: a
    }), !this.options.disabled && a && a.length && !this.cancelSearch ? (this._suggest(a), this._trigger("open")) : this._close();
}

谢谢

于 2020-03-12T00:11:32.070 回答