我是使用 typeahead 插件的新手,我的 javascript(不是 jquery)技能很糟糕。这是我的 JSON:
{"Product":[
{"@ProductCode":"C1010","@CategoryName":"Clips"},
{"@ProductCode":"C1012","@CategoryName":"Clips"},
{"@ProductCode":"C1013","@CategoryName":"Clips"},
{"@ProductCode":"C1014","@CategoryName":"Clips"},
{"@ProductCode":"C1015","@CategoryName":"Clips", "EAN":"0987654321"}
]}
我有预先输入的捆绑包 0.10.5 这是我的 js:
$(document).ready(function () {
var products = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
limit: 100,
remote: {
url: 'TypeAhead.ashx?q=%QUERY&cat=prod',
filter: function (data) {
return data.Products;
}
}
});
products.initialize();
$("#tbSSearch").typeahead({
highlight: true,
minLength: 2
}, {
source: products.ttAdapter(),
displayKey: function (products) {
return products.product.code;
},
templates: {
header:"<h3>Products</h3>"
}
});
});
Chrome 控制台给了我:
未捕获的类型错误:无法读取未定义的属性“长度”
但那是在我的 jquery.2.1(缩小)库中,而不是上面的 js 源。#tbSearch
浏览器在输入下方不显示弹出窗口。
正如@Mike 建议的那样,jsfiddle http://jsfiddle.net/gw0sfptd/1/但我必须修改一些东西才能使用本地json。这也不起作用大声笑
按照大卫的建议进行编辑,我应该清理我的 json。现在是这样:
[{"Code":"C1010","Gtin13":0,"CategoryName":"Clips"},
{"Code":"C1012","Gtin13":0,"CategoryName":"Clips"},
{"Code":"C1013","Gtin13":0,"CategoryName":"Clips"}]
和js:
remote: {
url: 'TypeAhead.ashx?q=%QUERY&cat=prod',
filter: function (products) {
return $.map(products.results, function (product) {
return {
value: product.Code
};
});
}
}
datumTokenizer: function (datum) {
return Bloodhound.tokenizers.whitespace(datum.value);
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
但在 Firefox 控制台中没有工作输入和没有(可用)错误。我想要的输出将是产品代码列表,还有它们所在的类别和 gtin13(如果不是 null),因为 sql 搜索所有这三个选项。我应该在客户端为产品创建一个 javascript“类”并将 json 解析为它吗?我仍然不清楚整个猎犬的工作原理。(是的,我查看了样本并阅读了 typeahead 和 Bloodhound 的文档)我不知道这是否可能,但我的最终愿望是,当您从 typeahead 建议中选择一个项目时,此 productdatasource 链接到 productdetail .aspx 并且如果您选择 categorydatasource 的一个项目(在这个问题中不可见),它将页面重定向到 categorydetail.aspx