Jquery UI自动完成选择最接近的匹配

时间:2014-05-21 13:15:20

标签: javascript jquery jquery-ui autocomplete

我有一个与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);
                } 
            });
        }
    })

};

2 个答案:

答案 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并包含选择正确的方法,我很乐意在需要时提供更多帮助