Ank*_*arg 1 json jquery-ui jquery-ui-autocomplete
我有以下形式的 json 数组:
[{"label":<some-label>,"spellings":[<list of spellings>]}, ...]
Run Code Online (Sandbox Code Playgroud)
我需要使用 jquery ui 自动完成来解析上面的数组。但是,有一些限制:
我应该如何处理它?任何指针?
并且,如何迭代对应“标签”的“拼写”列表?
这就是我想要做的,但输出乱码。
var labels = []
var values = []
$.getJSON($url, function(data) {
$.each(data, function(key, val) {
for (var v in val.value)
values.push(val.value[v])
labels.push(val.label)
});
$("#text1").autocomplete({
minLength: 2,
source: values,
focus: function(event, ui) {
$("#text1").val(ui.item.label);
return false;
},
select: function(event, ui) {
$("#text1").val(ui.item.label);
return false;
}
});
});
Run Code Online (Sandbox Code Playgroud)
我会建立一个单一的项目源数组,每个拼写一个,其中label属性是每个拼写的标签,value属性是拼写本身。这将使您能够快速过滤结果,而不必遍历每个对象的spelling数组并检查可能需要一段时间的匹配项。
然后,在您为 定义的函数中source,您可以执行自己的过滤逻辑,只允许建议列表中每个“标签”的一个实例。
这样的事情应该可以工作(请注意,自动完成是在$.getJSON回调内部初始化的。这是确保在小部件初始化之前加载源数据所必需的):
$.getJSON($url, function(data) {
$.each(data, function (i, el) {
source.push({ label: el.label, value: el.label });
$.each(el.spellings, function (j, spelling) {
source.push({ label: el.label, value: spelling });
});
});
/* initialize the autocomplete widget: */
$("input").autocomplete({
source: function (request, response) {
var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i")
, results = [];
/* Make sure each entry is only in the suggestions list once: */
$.each(source, function (i, value) {
if (matcher.test(value.value) && $.inArray(value.label, results) < 0) {
results.push(value.label);
}
});
response(results);
}
});
});
Run Code Online (Sandbox Code Playgroud)
示例: http : //jsfiddle.net/MaMZt/
| 归档时间: |
|
| 查看次数: |
2485 次 |
| 最近记录: |