我刚刚实现了这个自动完成功能:http://imankulov.github.io/asuggest/index.html 它可以正常使用这样的设置:
var suggests = ["head", "hello", "heart", "health", "horizontal", "horizont", "hormonotherapy"];
$("#autocomplete").asuggest(suggests, {'delimiters':':', 'minChunkSize':3, 'endingSymbols':'] '});
[
作为分隔符吗?它完全没有回应那个角色 - 这是一个巨大的无赖...... 反正;我想在用户输入时从数据库中提取的数据中填充suggests
- 变量。
我刚试过这种方法:
$("#autocomplete").keyup(function(){
var suggests = $.getJSON('assets/scripts/getExtra.json.php',{ term: $(this).val() }, function(data) {
return data;
});
$("#autocomplete").asuggest(suggests, {'delimiters':':', 'minChunkSize':3, 'endingSymbols':'] '});
});
这不起作用。控制台显示它返回一个具有预期值的字符串,但是asuggest函数没有检测到它。
当我现在看到它时,我可以看到它为每个角色提出了一个请求,并且包含了所有角色(textarea)..
关于每次启动新搜索时如何更改/更新suggests
- 变量而不是AJAX的任何建议?
我需要能够像这样进行搜索:
“首先用[this]和[that]填充一个容器。然后在最后添加一些[东西]。”
每次输入[
时,我都需要清除/清空suggests
- 变量,并启动对数据库的新搜索。
答案 0 :(得分:0)
Here你有一个使用JSONP作为数据源的全功能自动完成示例。
答案 1 :(得分:0)
请记住,您的AJAX调用是异步完成的。因此,当调用$.getJSON()
返回时,您的成功回调尚未被调用。因此,当它调用$("#autocomplete").asuggest(suggests, {})
时,您的变量没有数据(我不确定它会是什么)。
请改为尝试:
$("#autocomplete").keyup(function(){
$.getJSON('assets/scripts/getExtra.json.php',{ term: $(this).val() }, function(suggests) {
$("#autocomplete").asuggest(suggests, {'delimiters':':', 'minChunkSize':3, 'endingSymbols':'] '});
});
});
通过在回调中执行此操作,您可以在获取数据后初始化自动提示。
编辑:如果这不起作用,您可以尝试:
$("#autocomplete").keyup(function(){
$.getJSON('assets/scripts/getExtra.json.php',{ term: $(this).val() }, function(data) {
console.log(JSON.stringify(data);
var suggests = ["head", "hello", "heart", "health", "horizontal", "horizont", "hormonotherapy"];
$("#autocomplete").asuggest(suggests, {'delimiters':':', 'minChunkSize':3, 'endingSymbols':'] '});
});
});
答案 2 :(得分:0)
可能不相关,但这可能对某人有用。提取数据后,手动调用$("#autocomplete").keyup()
会向您显示更新的建议:
因此您的代码可能类似于:
$("#autocomplete").keyup(function(){
$.getJSON('assets/scripts/getExtra.json.php',{ term: $(this).val() }, function(suggests) {
$("#autocomplete").asuggest(suggests, {'delimiters':':', 'minChunkSize':3, 'endingSymbols':'] '});
$("#autocomplete").keyup(); // this line should do the trick
});
});