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

时间:2011-04-16 16:49:21

标签: 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);
  },
});

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

帮助表示赞赏。

2 个答案:

答案 0 :(得分:19)

尝试从select event

返回false
...
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;
},

从文档(选择事件):

  

选择项目时触发   从菜单; ui.item指的是   选定的项目。默认操作   select是替换文本字段的   值与所选的值   项目。 取消此活动会阻止   更新的价值,但确实如此   不要阻止菜单关闭。

You can try it here.

答案 1 :(得分:3)

虽然它可能在这里没有什么不同,但你应该说event.preventDefault

而不是返回false。

请参阅event.preventDefault() vs. return false

当您不需要时,总是停止传播事件是不好的做法。