我有一个 jquery 自动完成小部件,它显示带有自定义数据的项目。
他们都有一个value
, 和description
。
当前,value
当单击项目时将 插入到文本框中,并且value
项目的 是搜索的内容
我想做的是让过滤器同时使用value
和description
过滤要显示的项目,但只保留value
正在插入的项目。
我怎样才能做到这一点?
我有一个 jquery 自动完成小部件,它显示带有自定义数据的项目。
他们都有一个value
, 和description
。
当前,value
当单击项目时将 插入到文本框中,并且value
项目的 是搜索的内容
我想做的是让过滤器同时使用value
和description
过滤要显示的项目,但只保留value
正在插入的项目。
我怎样才能做到这一点?
value
如果你给自动完成器一个带有and label
(而不是)属性的对象数组description
,它会为你做过滤,但只在label
(不是value
)。
source
如果您为option指定函数,则需要自己进行过滤。你会收到一个request
参数(一个带有term
属性的对象)和一个response
参数(一个用结果回调的函数)。然后您自己返回相关结果,使用您喜欢的任何类型的搜索(例如,您可以同时搜索value
和description
在您的代码中搜索)。
例如,松散地:
$("some selector").autocomplete({
// ...other options...
source: function(request, response) {
var matches = [];
/* ...search for matches in your data using `request.term`,
add them to `matches`...
*/
response(matches);
}
});
您返回的数组可以只是字符串,也可以是具有value
和label
属性的对象。将label
显示,value
选择时将使用 。
例如,这里有一个使用(短)机场列表,当您键入它时,会同时检查value
(机场代码)和description
(机场名称):Live copy | 来源
jQuery(function($) {
var data = [
{value: "ORD", description: "Chicago O'Hare"},
{value: "LHR", description: "London Heathrow"},
{value: "SFO", description: "San Francisco International"}
];
$("#theInput").autocomplete({
source: function(request, response) {
var capterm = request.term.toUpperCase();
var matches = $.map(data, function(entry) {
if (entry.value.toUpperCase().indexOf(capterm) !== -1 ||
entry.description.toUpperCase().indexOf(capterm) !== -1) {
return {
value: entry.value,
label: entry.value + " - " + entry.description
};
}
});
response(matches);
}
});
});
因此,键入“or”或“chic”将显示“ORD - Chicago O'Hare”,选择它会将“ORD”放在该字段中。键入“san”或“sfo”将显示“SFO - San Francisco International”,选择它会将“SFO”放在该字段中。