基于用户文本输入动态加载数据库

Dynamically loading a database based on user text input

本文关键字:输入 动态 加载 数据库 文本 于用户 用户      更新时间:2023-09-26

我有一个自动完成小部件,它需要从对象数据库返回选项。

这样一来,一旦用户选择了一个项目,小部件就会用他们选择的特定对象的值填充其他隐藏的文本字段。-所有这些工作,并已用于以前的项目

然而,这个特定的数据库太大了(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");
        }
    });
}