JQuery自动完成包含大量数据

时间:2015-08-06 05:41:30

标签: javascript java jquery jsp jstl

我正在使用纯JSP和servlet开发应用程序。在我的一个JSP页面中,我有一个字段,当用户开始输入时它应该自动完成。为此,我使用了JQuery Auto Complete(https://jqueryui.com/autocomplete/)插件。

我所做的是,我使用Servlet从数据库加载数据,并将该数据作为Bean传递给JSP。在我的JSP中,我在JavaScript中使用JSTL来提供自动完成字段。

以下是代码

<script>
            $(function () {
                var availableTags=[] ;

                <c:forEach var="NamesList" items="${requestScope['NamesList']}">
                     availableTags.push("${NamesList.Name}");
                </c:forEach>

                $("#addTxt").autocomplete({
                    source: availableTags
                });
                $( "#addTxt" ).autocomplete( "option", "appendTo", ".form-horizontal" );



            });
</script>



<input id="addNameTxt" name="nameTxt"  class="form-control input-md" >

但这是最好的部分。此列表包含22,500个元素。有些是长名称,可能包含超过50/60个单词。现在的问题是,虽然加载页面没有太多时间,但“有时”它会在自动完成开始时卡住。我猜它正在搜索很多元素,并且会出现内存或其他内容。

我还注意到以下行为,这可能会导致这种滞后。想象一下,我有如下文字。

Cat/Bat/Dog/Space ship/FrontLine
Cat
Bat
Space Ship

如果我输入“Bat”,我的期望是找到“Bat”开头的文字,而不是在中间某处可能包含“Bat”的文字。由于这种搜索需要时间,我猜它也有laggi,当时有22,500条记录。无论如何,这只是一个侧面说明。

那么,我该如何解决这个问题并使自动完成快速?

1 个答案:

答案 0 :(得分:0)

查找开头的文字&#34; Bat&#34;您需要在自动填充调用中添加以下正则表达式。这也可能使自动完成速度快。

$("#addTxt").autocomplete({
    source: function(req, responseFn) {
                var re = $.ui.autocomplete.escapeRegex(req.term);
                var matcher = new RegExp( "^" + re, "i" );
                var a = $.grep( availableTags, function(item,index){
                    return matcher.test(item);
                });
                responseFn( a );
            }
});