我有一个自动完成小部件,需要从对象数据库中返回选项。
一旦这样做,一旦用户选择了一个项目,该小部件将使用他们选择的特定对象的值填充其他隐藏的文本字段。 - 所有这些都有效,并且已用于以前的项目
然而,这个特定的数据库太大了(44k +对象,文件大小是几mb,并且在实践中加载时间太长)所以我们已经尝试了各种方法将它拆分。到目前为止,最好的是对象标签的第一个字母。
因此,我尝试创建一个跟踪用户输入到文本字段并返回第一个字母的函数。然后将其用于AJAX该名称的文件(例如a.js)。
这就是说我在尝试追踪这个级别的用户输入时从来没有太多的运气,并且通常会发现,当我试图在第一次完成时,需要几次按键才能让所有工作都能正常工作按键。有没有人对更好地实现这一目标有任何建议?或者为什么这个过程不能立即发挥作用?
以下是我当前用于跟踪用户输入的非工作代码 - 它在页面加载时使用:
function startupp(){
console.log("starting");
$("#_Q0_Q0_Q0").on("keyup", function(){
console.log("further starting!");
if($("#_Q0_Q0_Q0").val().length == 1){
console.log("more starting");
countryChange(($("#_Q0_Q0_Q0").val()[0]).toUpperCase());
}
else{
console.log("over or under");
}
});
}
数据示例(虚拟值):
tags=[
{
label:"label",
code:"1",
refnum:"555555",
la:"888",
DCSF:"4444",
type:"Not applicable",
status:"Open",
UR:"1",
gRegion:"North West"
},
....
];
将startupp
从.change(function)
更改为.on("keyup", function)
- 也可以使用keydown,这是我个人的偏好。
将autocomplete
设置更改为minLength: 4,
- 因为数据从第一个字母开始加载,这使得它在提供选项之前加载数据所需的额外拆分ms并减少需要显示多少数据(有助于几个特定实例)。
通过将autocomplete
设置更改为以下内容,更改了收集来源的方式:
source: function(request, response) {
var results = $.ui.autocomplete.filter(tags, request.term);
response(results.slice(0, 20));
},
其中tags是包含数据的数组。
现在一切似乎都在起作用。答案 0 :(得分:3)
您应该绑定到keydown
事件:
function startupp(){
console.log("starting");
$("#_Q0_Q0_Q0").keydown(function(){
console.log("further starting!");
if($(this).length() == 1){
console.log("more starting");
countryChange(($(this).val()[0]).toUpperCase());
}
else{
console.log("over or under");
}
});
}