【发布时间】:2018-11-09 07:44:14
【问题描述】:
我有一个自动完成字段,在输入类型时我会转到 PHP/数据库以检索匹配选项。
问题是,我的建议列表与文本不完全匹配。我解释一下:
假设我输入“Jon”。我的列表将从数据库“John Doe”、“Jonatan”等中获取。只有“Jonatan”作为输入的建议可见,但我确实需要它们,因为它考虑了近似值(我的上有一个 soundex 元素后端搜索)。
我的 JavaScript/Ajax 代码:
function prePatientsList(){
//I'm limiting search so it only starts on the second character
if (document.getElementById("name").value.length >= 2) {
try
{
listExecute.abort();
}catch(err) {
null;
}
var nome= $("#name").val();
var nomeList = "";
listExecute = $.ajax({
url: '/web/aconselhamento/Atendimento/PrePacientesAutocomplete',
type: "POST",
async: true,
datatype: 'json',
data: { nome: nome}
}).done(function(data){
source = JSON.parse(data);
});
$(function() {
$("input#nome").autocomplete({
source: source,
// I know I probably don't need this, but I have a similar component which has an URL as value, so when I select an option, it redirects me, and I'll apply you kind answer on both.
select: function( event, ui ) {
ui.item.label;
}
});
});
}
}
谢谢。
【问题讨论】:
-
我唯一的建议是使用正则表达式。 developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/… 仍然需要做很多工作来分解字符串等。祝你好运:)
-
没有看到你的后端代码,很难确定,但我猜你需要研究更好的文本搜索实现。例如,如果没有 Levenshtein 距离或 n-gram 索引,您可能会发现很难找到相近的匹配。也许看看 Elasticsearch 或 Apache Solr?
-
我的后端已经给了我正确的 JSON。如果我键入 Jon,我的建议列表变量(在本例中为源)将获得正确的值(John Doe 等)。问题是:自动完成文本输入只会显示完全匹配的列表项目。我的列表与我的 soundex 匹配,所以我需要一直显示整个列表。
-
@ryuzakixd 请提供一个正在返回的 JSON 数据的示例。由于您是从返回的数据中本地过滤源,因此它非常基本。如果这个词是
Jon,它不会命中John。您必须为此创建自己的算法。
标签: javascript jquery ajax jquery-ui jquery-ui-autocomplete