9

我正在使用带有 Knockout JS 模板/JQuery 的自动完成组合框中提供的自定义绑定

我需要强制用户必须在自动完成列表中选择一个值,并且在他们选择该值后不能向选择添加其他文本。我已经搜索过,但找不到如何防止输入其他文本的示例。它必须保持可编辑,以防他们选择了错误的下拉菜单,但他们输入的内容必须 100% 与列表中的值匹配。

我在 jquery 上找到了这个帖子,但它已经 9 个月大了,没有人发布答案。

4

2 回答 2

13

没有内置功能可以做你想做的事。

我做了一个简单的项目,使用自动完成change事件,您必须从自动完成中选择值,如果不是,则删除该值。

更改事件

如果值已更改,则在字段模糊时触发。

选择后,该字段被禁用,您可以使用激活锚激活它(例如)。

代码:

$("#artist").autocomplete({
    source: function (request, response) {
        $.ajax({
            url: "http://en.wikipedia.org/w/api.php",
            dataType: "jsonp",
            data: {
                'action': "opensearch",
                    'format': "json",
                    'search': request.term
            },
            success: function (data) {
                response(data[1]);
            }
        });
    },
    change: function (event, ui) {
        if (ui.item == null || ui.item == undefined) {
            $("#artist").val("");
            $("#artist").attr("disabled", false);
        } else {
            $("#artist").attr("disabled", true);
        }
    }
});

$('#changeArtist').click(function (e) {
    e.preventDefault();
    $("#artist").attr("disabled", false);
});

这是一个小提琴:http: //jsfiddle.net/IrvinDominin/nH4Nx/

于 2013-05-05T10:40:03.293 回答
0

这是一篇较旧的帖子,但我认为从用户体验的角度来看,由于焦点问题,它有点不完整(直到焦点从输入中移除后才会进行更改,在这种情况下是“#artist”,相当烦人),所以我要补充:

   select: function (event, ui) {
        $("#artist").attr("disabled", false);
    }

所以(假设它是我们试图启用的按钮)用户在选择后立即看到启用的对象。

于 2016-11-02T12:44:44.447 回答