Typeahead Bloodhound 搜索和自动完成不适用于远程 url
Typahead Bloodhound hint and autocomplete not working with remote url
我不知道为什么不能使用远程 url。
当相同的 results/json 数组在本地加载时它工作正常。
我的代码
var bh_engine = new Bloodhound({
datumTokenizer: function(d) {
var my_string = d.company_name;
my_string = my_string.replace(/\s/g, "");
var string_length = my_string.length;
var my_matches = [];
for (var i = 0; i < string_length; i++) {
my_matches.push(my_string.substring(i, string_length));
}
return my_matches;
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
local: local_source,
prefetch: prefetch_source,
remote: remote_source
});
bh_engine.initialize();
$(apply_on_element + ' .bootstrap-tags-input input#mytaginput').typeahead({
hint: true,
highlight: true,
minLength: 1
}, {
async:true,
displayKey: 'company_name',
source: bh_engine.ttAdapter()
});
Json数据
[{"company_name":"Google","code":1},{"company_name":"Facebook","code":2}]
在本地和远程使用相同的数据进行测试。
它只给远程访问带来问题。
有什么想法吗?为什么?
您也可以在这里查看
JSfiddle
首先输入"string1"或"string2"等字符串...
然后用远程数据类型"data30"等等.....
每次显示json对象的第一个元素
如您所见,bold/highlight 功能运行良好,但提示不正常
我只想在输入 "data50" 时显示 "data50" 或至少显示在列表的第一位
您可以在远程对象上使用 Bloodhound 变换方法来模拟为本地数据实现的相同行为。
window.bh = bloodhoundSuggestions = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
sufficient: 3,
local: suggestions,
remote: {
url: 'https://www.mockaroo.com/api/generate.json?key=9c13bbb0&schema=typeahead',
transform: function(response) {
// input selector
var input = $("#tagsInput").val();
return response.filter( function (item) {
return input.toLowerCase() == item.value.toLowerCase().substr(0, input.length);
});
}
},
});
JsFiddle - 只需输入数据
我不知道为什么不能使用远程 url。 当相同的 results/json 数组在本地加载时它工作正常。
我的代码
var bh_engine = new Bloodhound({
datumTokenizer: function(d) {
var my_string = d.company_name;
my_string = my_string.replace(/\s/g, "");
var string_length = my_string.length;
var my_matches = [];
for (var i = 0; i < string_length; i++) {
my_matches.push(my_string.substring(i, string_length));
}
return my_matches;
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
local: local_source,
prefetch: prefetch_source,
remote: remote_source
});
bh_engine.initialize();
$(apply_on_element + ' .bootstrap-tags-input input#mytaginput').typeahead({
hint: true,
highlight: true,
minLength: 1
}, {
async:true,
displayKey: 'company_name',
source: bh_engine.ttAdapter()
});
Json数据
[{"company_name":"Google","code":1},{"company_name":"Facebook","code":2}]
在本地和远程使用相同的数据进行测试。 它只给远程访问带来问题。
有什么想法吗?为什么?
您也可以在这里查看 JSfiddle
首先输入"string1"或"string2"等字符串...
然后用远程数据类型"data30"等等.....
每次显示json对象的第一个元素
如您所见,bold/highlight 功能运行良好,但提示不正常
我只想在输入 "data50" 时显示 "data50" 或至少显示在列表的第一位
您可以在远程对象上使用 Bloodhound 变换方法来模拟为本地数据实现的相同行为。
window.bh = bloodhoundSuggestions = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
sufficient: 3,
local: suggestions,
remote: {
url: 'https://www.mockaroo.com/api/generate.json?key=9c13bbb0&schema=typeahead',
transform: function(response) {
// input selector
var input = $("#tagsInput").val();
return response.filter( function (item) {
return input.toLowerCase() == item.value.toLowerCase().substr(0, input.length);
});
}
},
});
JsFiddle - 只需输入数据