我正在使用纯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条记录。无论如何,这只是一个侧面说明。
那么,我该如何解决这个问题并使自动完成快速?
答案 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 );
}
});