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

时间:2014-04-24 08:56:56

标签: javascript jquery 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, - 因为数据从第一个字母开始加载,这使得它在提供选项之前加载数据所需的额外拆分ms并减少需要显示多少数据(有助于几个特定实例)。

  • 通过将autocomplete设置更改为以下内容,更改了收集来源的方式:

    source: function(request, response) { var results = $.ui.autocomplete.filter(tags, request.term); response(results.slice(0, 20)); },

其中tags是包含数据的数组。

现在一切似乎都在起作用。

1 个答案:

答案 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");
        }
    });
}