如何在jQuery UI自动完成中覆盖select的默认行为?

doo*_*urt 9 jquery jquery-ui autocomplete jquery-ui-autocomplete

我有以下内容:

$('#<%=txtCity.ClientID%>').autocomplete({
  source: function (request, response) {
    var parameters = {
      isoalpha2: '<%=Session["BusinessCountry"].ToString()%>',
      prefixText: request.term
    };
    $.ajax({
      url: '<%=ResolveUrl("~/AtomicService/Assets.asmx/GetCitiesWithState")%>',
      type: 'POST',
      dataType: 'json',
      contentType: 'application/json; charset=utf-8',
      data: JSON.stringify(parameters),
      success: function (data) {
        response($.each(data.d, function (index, value) {
          return {
            label: value.slice(value.indexOf(',')),
            value: parseInt(value.split(',')[0])
          }
        }));
      }

    });
  },
  minLength: 2,
  delay: 50,
  select: function (event, ui) {
    var city = ui.item.label.split(',')[0];
    var state = ui.item.label.split(',')[1];
    alert(city);
    alert(state);
    $('#<%=txtCity.ClientID%>').val(city);
    $('#<%=txtState.ClientID%>').val(state);
  },
});
Run Code Online (Sandbox Code Playgroud)

这是所有快乐的日子,除非我从自动填充列表中选择一个项目,我不希望自动填充填充$('#<%=txtCity.ClientID%>')元素.我该怎么做?我看到了.insertAfter,那是我应该看的东西吗?

帮助赞赏.

kar*_*m79 19

尝试falseselect活动中返回:

...
select: function(event, ui) {
    var city = ui.item.label.split(',')[0];
    var state = ui.item.label.split(',')[1];
    alert(city);
    alert(state);
    $('#<%=txtCity.ClientID%>').val(city);
    $('#<%=txtState.ClientID%>').val(state);
    return false;
},
Run Code Online (Sandbox Code Playgroud)

从文档(选择事件):

从菜单中选择项目时触发; ui.item指的是所选项目.select的默认操作是将文本字段的值替换为所选项的值.取消此事件可防止更新值,但不会阻止菜单关闭.

你可以在这里试试.