Javascript JQuery自动完成不';t处理第一个按键事件(源是一个数组)
我正在创建一个搜索结果自动完成像谷歌 自动完成的结果(或源)将是一个动态数组(该数组是使用从Javascript JQuery自动完成不';t处理第一个按键事件(源是一个数组),javascript,jquery,ajax,jquery-ui,autocomplete,Javascript,Jquery,Ajax,Jquery Ui,Autocomplete,我正在创建一个搜索结果自动完成像谷歌 自动完成的结果(或源)将是一个动态数组(该数组是使用从$.ajax调用中的URL属性访问的对象创建的),并且元素在每个按键事件中都会快速变化 我的意思很简单: 我们有一个变量autocompleteResults 在$.ajax成功回调函数中,我们将此变量分配给空数组:autocompleteResults=[] 在此之后,我们将执行$。each()函数: $.each(d.query.pages, function(i) { autocompleteR
$.ajax
调用中的URL
属性访问的对象创建的),并且元素在每个按键
事件中都会快速变化
我的意思很简单:
autocompleteResults
$.ajax
成功回调函数中,我们将此变量分配给空数组:autocompleteResults=[]
$。each()
函数:
$.each(d.query.pages, function(i) {
autocompleteResults.push(d.query.pages[i].title);
});
// d.query.pages - JSON object from the success callback (success: function(d) {...}
回调(autocompleteResults)
getAutocompleteResults(function() {
console.log(autocompleteResults);
});
$("#search").autocomplete({source: autocompleteResults},...);
它只在我第二次打字时起作用使用图像进行快速概述:
我所有关于这个问题的研究成果:
按键
事件功能中,则它可以完美工作。然而,在这种情况下,我们得到一次结果,然后它停止响应未来的类型(输入“a”-5个结果,输入“aa”-与“a”相同的结果,并且它没有响应
我想我应该使用前面提到的$(“.selector”).autocomplete(“search”,”);
再次更改源代码,但我不确定它是否能解决此问题要查看完整的项目代码,请转到此处: 或者使用一小段代码(这样您就可以看到问题发生的最重要部分):
$(函数(){
var自动完成结果;
var changeText2=函数(e){
var request=$(“input”).val()+String.fromCharCode(e.which);
$(“#即时搜索”).text(请求);
var getAutocompleteResults=函数(回调){
$.ajax({
url:“https://en.wikipedia.org/w/api.php?action=query&format=json&gsrlimit=5&generator=search&origin=*&gsrsearch=“+$('#即时搜索”).text(),
成功:功能(d){
自动完成结果=[];
$。每个(d.query.pages,函数(i){
autocompleteResults.push(d.query.pages[i].title);
});
回调(自动完成结果);
},
数据类型:“json”,
缓存:false
});
};
getAutocompleteResults(函数(){
console.log(自动完成结果);
});
$(“#搜索”).autocomplete({
资料来源:autocompleteResults,
答复:函数(){
如果(
$(“#即时搜索”)
.text()
) {
$(“表格”).css(“显示”、“表格”);
}
},
关闭:函数(){
如果(!$(“.ui自动完成”)。是(“:可见”)){
$(“.ui自动完成”).show();
}
},
追加:“.input”,
重点:职能(e){
e、 预防默认值();
},
延迟:0
});
};
var changeText1=函数(e){
如果(
/[-a-z0-90áèèèèèèèèèèèèèèèèèèèèèèèèèèè(
String.fromCharCode(e.which)
)
) {
$(“输入”)。在(“按键”,changeText2);
}
//此部分与此问题无关,删除此部分将使HTML创建的表无法正常工作
var getInputSelection=函数(输入){
var start=0,
结束=0;
input.focus();
如果(
输入的类型。选择开始==“编号”&&
typeof input.selectionEnd==“数字”
) {
开始=输入。选择开始;
结束=输入。选择结束;
}else if(document.selection&&document.selection.createRange){
var range=document.selection.createRange();
如果(范围){
var inputRange=input.createTextRange();
var workingRange=inputRange.duplicate();
var bookmark=range.getBookmark();
inputRange.moveToBookmark(书签);
工作范围.setEndPoint(“EndToEnd”,输入范围);
结束=工作范围.text.length;
工作范围.setEndPoint(“EndToStart”,输入范围);
开始=工作范围.text.length;
}
}
返回{
开始:开始,
完:完,,
长度:结束-开始
};
};
开关(电子钥匙){
案例“Backspace”:
案例“删除”:
e=e | | window.event;
var-keyCode=e.keyCode;
var deleteKey=keyCode==46;
var sel、deletedText、val;
val=该值;
sel=getInputSelection(此);
如果(选择长度){
//0 kai paprastai trini po viena o 1 ar daugiau kai select su pele trini
$(“#即时搜索”).text(
val.substr(0,选择开始)+val.substr(选择结束)
);
}否则{
$(“#即时搜索”).text(
val.substr(0,删除键?选择启动:选择启动-1)+
val.substr(德尔
source: function (request, response) {
getAutocompleteResults(function(data){
response(data);
});
},