Javascript 使用jquery autocomplete从简单数组自动完成从一开始的精确匹配
如何使用jquery autocomplete和来自简单数组的输入启用从字符串开始的精确匹配 如果阵列中包含以下内容:Javascript 使用jquery autocomplete从简单数组自动完成从一开始的精确匹配,javascript,jquery,arrays,autocomplete,Javascript,Jquery,Arrays,Autocomplete,如何使用jquery autocomplete和来自简单数组的输入启用从字符串开始的精确匹配 如果阵列中包含以下内容: 聪明的 过分聪明 斯马特兰 欠聪明 维里斯马特 如果我在文本输入中键入“sma…”,则必须仅显示smart和smartland,而不是其他。您可以使用正则表达式将输入的子字符串与数组中的值匹配。您只需要将源参数作为一个函数进行修改,以满足您的需要。像这样: 更新:向答案添加代码: var acList = ['smart', 'oversmart', 'smartlan
- 聪明的
- 过分聪明
- 斯马特兰
- 欠聪明
- 维里斯马特
如果我在文本输入中键入“sma…”,则必须仅显示smart和smartland,而不是其他。您可以使用正则表达式将输入的子字符串与数组中的值匹配。您只需要将源参数作为一个函数进行修改,以满足您的需要。像这样:
更新:向答案添加代码:
var acList = ['smart', 'oversmart', 'smartland', 'undersmart', 'verysmart'];
$('#ac').autocomplete({
source: function (request, response) {
var matches = $.map(acList, function (acItem) {
if (acItem.toUpperCase().indexOf(request.term.toUpperCase()) === 0) {
return acItem;
}
});
response(matches);
}
});
JQuery有太多的插件。只需在上面撒一点正则表达式,然后写下类似的内容(我没有测试它,但我以前也做过类似的事情):
您可以删除
新RegEx
参数中的'^'+
,以恢复您描述为有问题的行为<代码>“^”表示行/字符串选择的开始,因此除非在开始处,否则“s”将不匹配。自上一个答案被接受以来,这已发生变化。现在有了一个lookupFilter
选项来执行此操作,而且更简单。从中,只需将其添加到选项列表中:
lookupFilter: function (suggestion, originalQuery, queryLowerCase) {
return suggestion.value.toLowerCase().indexOf(queryLowerCase) === 0;
},
实现这一点的方法记录在
var标签=[“c++”、“java”、“php”、“coldfusion”、“javascript”、“asp”、“ruby”];
$(“#自动完成”)。自动完成({
来源:功能(请求、响应){
var matcher=newregexp(“^”+$.ui.autocomplete.escapeRegex(request.term),“i”);
响应($.grep(标记、函数(项)){
返回匹配器测试(项目);
}) );
}
});
Erik的可能复制品-谢谢你,我会记住这一点,并调整它,看看它如何适合autcomplete…这似乎是针对不同的插件的。我想知道这是否是最有效的方法。我不知道。
lookupFilter: function (suggestion, originalQuery, queryLowerCase) {
return suggestion.value.toLowerCase().indexOf(queryLowerCase) === 0;
},
<script>
var tags = [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ];
$( "#autocomplete" ).autocomplete({
source: function( request, response ) {
var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( request.term ), "i" );
response( $.grep( tags, function( item ){
return matcher.test( item );
}) );
}
});
</script>