2011-04-16 71 views
8

我有以下几点:如何覆盖select的默认行为:在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,我应该看看吗?

帮助赞赏。

+0

我认为这包括ASP.NET代码? – 2011-04-16 16:51:16

回答

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.

+0

完美!谢谢karim79;)现货... – dooburt 2011-04-16 17:09:14

+0

谢谢,我正在寻找这个。 – Moy 2014-08-16 00:19:36