我有一个与Jquery ui自动完成相关的输入字段。 该字段用于用户输入设备的目录号。 他可以通过两种方式做到这一点:
不幸的条形码并不总是给出与设备上印刷的相同的答案。印有:
100-ENT / A但条形码返回100-ENT / OA
打印156-CNR / B和条形码返回156-CNR B
所以我想从自动填充中选择最接近的匹配。
我知道我可以使用此插件来选择第一个插件:CLICK 但如何让它选择最接近的匹配?
此时我仍然坚持使用干净的代码加载自动完成功能:
function GetNames() {
var availableTags;
var jsonData
$.ajax({
url: "/DeviceInstance/GetDeviceNames",
type: "GET",
dataType: "json",
error: function (data) {
alert("wystąpił nieokreślony błąd " + data);
},
success: function (data) {
availableTags = data;
$(".deviceCatalog").autocomplete({
source: availableTags,
change: function (event, ui)
{
viewModel.DeviceTemp(ui.item.id);
}
});
}
})
};
答案 0 :(得分:2)
您需要考虑用于纠正拼写错误的算法方向。例如,这些正确的Yuor to Your。某些算法(如字符串编辑距离)会告诉您两个字符串中哪一个更接近第三个,例如:
Yuor和Your之间的编辑距离是2,因为你需要将两个字母u改为o而o改为u。 Yuor和York之间的编辑距离是2,因为您需要删除o,然后添加k(但您可以认为添加或删除更昂贵,因此将o的删除计为2分)。
这意味着你比约克更接近于约。所以你的算法会选择你而不是约克作为对Yuor的修正。
我认为这是您需要深入了解的内容:http://en.wikipedia.org/wiki/Edit_distance
还有着名的动态编程算法可以解决这个问题,而不是非常复杂(它们不是真正的软件编程")。见http://en.wikipedia.org/wiki/Levenshtein_distance
答案 1 :(得分:1)
你需要构建一个能够识别最接近匹配的方法,一旦你有了这个方法,你可以在其中一个自动完成事件上调用该方法。看起来你会想要在公开赛上打电话给你,这样你就可以预先选择最好的比赛"然后让用户从那里挑选。
希望这会有所帮助。
如果您想设置一个jsbin并包含选择正确的方法,我很乐意在需要时提供更多帮助