基于用户文本输入动态加载数据库
Dynamically loading a database based on user text input
我有一个自动完成小部件,它需要从对象数据库返回选项。
这样一来,一旦用户选择了一个项目,小部件就会用他们选择的特定对象的值填充其他隐藏的文本字段。-所有这些工作,并已用于以前的项目
然而,这个特定的数据库太大了(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,
-当数据从第一个字母开始加载时,这使其在提供选项之前有几个额外的拆分毫秒来加载数据,还减少了需要显示的数据量(有助于几个特定实例)。通过将
autocomplete
设置更改为以下内容,更改了收集来源的方式:source: function(request, response) { var results = $.ui.autocomplete.filter(tags, request.term); response(results.slice(0, 20)); },
其中tags是包含数据的数组。
现在一切似乎都在起作用。
您应该绑定到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");
}
});
}
- Highcharts:根据表单输入动态显示数据
- 如何根据两个不同的输入动态设置链接的路径
- 使用用户输入动态转换数据(Highcharts,JavaScript,Django)
- 基于文本输入动态更改图片
- 如何为jQuery帖子输入动态数据参数
- 根据用户表单输入动态生成 SQL 语句
- 使用单选按钮将文本输入动态添加到列表中
- 如何将外部输入动态注入 SlimerJS 脚本
- 根据用户输入动态设置高图表尾行选项
- 如何根据输入动态形成字符串
- 将用户输入动态地附加到<script src=“">来自Java Script中的文本框
- 使用其他输入动态添加和删除输入
- Rails根据用户输入动态更新View
- 在Powerpoint中根据用户输入动态更改幻灯片
- 使用用户输入动态创建表
- 从输入动态添加选项
- 根据用户输入动态创建HTTP链接
- 如何检测输入动态变化时的变化
- Angular2使用输入动态添加到表单模型中
- 禁用按钮和输入动态名称