【发布时间】:2011-08-13 01:54:01
【问题描述】:
使用 JQuery AutoComplete UI ,1.8,我需要更改搜索,使其仅匹配字符串的开头。 背景我的来源来自我无法控制的 ajax 调用,它返回 15,000 及其相应的 PK。 value 是名称,Id 是整数 PK。下面的代码有效,但由于我正在搜索与字符串中任何位置匹配的 15,00 个字符串,所以速度太慢了。 我已经看过这个帖子,链接,但我不知道该怎么做才能不丢失源中的 Id 字段。
我需要搜索只匹配 data.d 中值的开头而不会丢失 Id 字段。 这是一个 ASP.Net 应用程序,但我认为这并不重要。 想法?
$("#companyList").autocomplete({
minLength: 4,
source: data.d,
focus: function(event, ui) {
$('#companyList').val(ui.item.value);
return false;
},
select: function(event, ui) {
$('#companyList').val(ui.item.value);
$('#<%= hdnCompanyListSelectedValue.ClientID %>').val(ui.item.Id);
return false;
}
});
【问题讨论】:
-
你是对的 - 它是一个 ASPNET 应用程序并不重要。 如果不丢失源中的 Id 字段,我不知道该怎么做是什么意思?源可以是函数;您需要用 fn 替换您的源代码,它会扫描
data.d并找到您想要的内容,然后使用结果集调用responseFn。例如,您需要提供source: function(req,responseFn){...}而不是source: data.d,尚不清楚“丢失 id”有什么问题。 -
也许你的意思是,当它被调用时,你希望 id 在
select:fn 中可用,对吗?在这种情况下,您可能还需要修补_renderMenu和_renderItemfns,将 id 插入到每个值的<li>元素中 - 可能使用自定义属性。有关如何执行此操作,请参阅stackoverflow.com/questions/2435964/… -
如果我在下面更改源代码 1) 它不起作用 2) 我可以使它起作用的唯一方法是只传递名称,这意味着我不会在选择。来源:函数(req,responseFn){ var re = $.ui.autocomplete.escapeRegex(req.term); var matcher = new RegExp("^" + re, "i" ); var a = $.grep(data.d, function(item,index){ return matcher.test(item); });响应Fn(一); }
-
@Cheeso,在您的第二条评论中更正,我需要选择的 ID
标签: jquery search user-interface autocomplete