您好我正在尝试让jQuery UI自动完成小部件正常工作,以便从我的数组的多个属性中搜索匹配项(而不仅仅是它默认执行的那些)。
我已经弄乱了他们的例子,但是我仍然不确定如何解决这个问题。
这是script
var projects = [
{
value: "jquery",
label: "jQuery",
desc: "the write less, do more, JavaScript library",
other: "9834275 9847598023 753425828975340 82974598823"
},
{
value: "jquery-ui",
label: "jQuery UI",
desc: "the official user interface library for jQuery",
other: "98 83475 9358 949078 8 40287089754 345 2345"
},
{
value: "sizzlejs",
label: "Sizzle JS",
desc: "a pure-JavaScript CSS selector engine",
other: "49857 2389442 573489057 89024375 928037890"
}
我要求的是,如果你输入“write”,第一个元素应该在自动完成中弹出,类似地,如果你输入“jq”,前两个元素应该弹出。
数组:数组可用于本地数据。有两种支持的格式:
字符串数组:
[ "Choice1", "Choice2" ]
具有标签和值属性的对象数组:
[ { label: "Choice1", value: "value1" }, ... ]
标签属性显示在建议菜单中。当用户选择项目时,值将插入到input元素中。如果仅指定了一个属性,则它将用于两者,例如,如果仅提供值属性,则值也将用作标签< / strong>即可。
我如何(硬)编码,以便来源使用 2个标签(label
和desc
?)而不是标签 ?
(对不起,我已经搜索了很多类似的问题,但是它们都针对多个来源,因为我只有1个数组,所以不在这里。是吗?)
答案 0 :(得分:11)
自动填充会接受third type of source这个函数,它可以以您认为合适的方式提供数据:
第三个变体,一个回调,提供了最大的灵活性和可以 用于将任何数据源连接到自动完成。回调得到了 两个论点:
- 具有单个术语属性的请求对象,该属性引用文本输入中当前的值。例如,如果用户输入 在城市领域的“新哟”,自动完成术语将等于“新哟”。
- 响应回调,它需要一个参数:向用户建议的数据。应根据此数据过滤此数据 提供的术语,可以是上面描述的任何格式 简单的本地数据。提供自定义源时非常重要 回调以在请求期间处理错误。你必须经常打电话给 即使遇到错误也会回复回调。这确保了 小部件始终具有正确的状态。
这意味着你可以写这样的东西
$( "#project" ).autocomplete({
source: function (request, response) {
// request.term is what you typed
console.log(request.term);
//call response with an array containing the filtered data
response([...]);
}
});
解决问题的简单方法:
function lightwell(request, response) {
function hasMatch(s) {
return s.toLowerCase().indexOf(request.term.toLowerCase())!==-1;
}
var i, l, obj, matches = [];
if (request.term==="") {
response([]);
return;
}
for (i = 0, l = projects.length; i<l; i++) {
obj = projects[i];
if (hasMatch(obj.label) || hasMatch(obj.desc)) {
matches.push(obj);
}
}
response(matches);
}
$( "#project").autocomplete({
source: lightwell
});