私は 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"}
]}
typeahead バンドル 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コンソールは私に与えます:
キャッチされていない TypeError: 未定義のプロパティ '長さ' を読み取ることができません
しかし、それは上記のjsソースではなく、私のjquery.2.1(縮小)ライブラリにあります。ブラウザは、入力の下にポップアップを表示しません#tbSearch
。
@Mike が示唆したように、jsfiddle http://jsfiddle.net/gw0sfptd/1/ですが、ローカル json で動作するようにいくつか変更する必要がありました。これも機能しませんLOL
Davidが提案したように編集して、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 がこれら 3 つのオプションすべてを検索するためです。クライアント側で製品のjavascript「クラス」を作成し、jsonを解析する必要がありますか? ブラッドハウンド全体がどのように機能するかはまだ不明です。(はい、サンプルを見て、先行入力とブラッドハウンドの両方のドキュメントを読みました) それが可能かどうかはわかりませんが、私の究極の願いは、先行入力の提案からアイテムを選択したときに、この productdatasource が productdetail にリンクされることです。 .aspx であり、categorydatasource (この質問では見えない) の項目を選択すると、ページが categorydetail.aspx にリダイレクトされます