jQuery UI自动完成 - 未在focusOut上选择匹配的选项

时间:2013-09-26 07:33:56

标签: javascript jquery jquery-ui jquery-autocomplete jquery-ui-autocomplete

我做了 jQuery UI - autocomplete ,其中添加了以下条件:

  1. 排序选项列表
  2. 必须选择一个选项
  3. 这里我犯了一个错误,当我输入确切选项时,它没有被选中。

    例如:

    var json = ["JOAQUIN", "BERNARDINO", "MODOC", "ALASKA", "MADERA", "ANDERSON", 
                                                      "Kingston", "Kala", "Aka"];
    
      
        
    1. 我输入 aka 不接受
    2.   
    3. 我还尝试了 Aka ,但仍不接受
    4.   

    如何重现:

      

    textbox中输入以上文字后,只需focusout - 值   将被清空。我想处理 aka = Aka = AKA (有/无选择选项列表)

    PS:我不是要求代码,我犯了一个小错误,我需要它才是正确的。

    这是我的fiddle,您可以轻松地重现该异常。

    如何更改我的代码才能像这样工作。请分享您的建议,并指出我在正确的方向上按顺序排列条件。

2 个答案:

答案 0 :(得分:2)

如果您将事件更改为关闭而不是更改事件,该怎么办?然后检查值是否在数组中,如果没有清除容器。这将要求您在输入值时匹配大小写。如果你想忽略大小写,你可以在搜索数组之前将json数组转换为小写,将值转换为小写。

fiddle

var json = ["JOAQUIN", "BERNARDINO", "MODOC", "ALASKA", "MADERA", "ANDERSON", "Kingston", "Kala", "Aka"];
$('input').autocomplete({
    source: function (request, response) {
        var matches = $.map(json, function (json) {
            if (json.toUpperCase().indexOf(request.term.toUpperCase()) === 0) {
                return json;
            }
        });
        response(matches);
    },

    close: function(event, ui) {
        var index = jQuery.inArray($('input').val(), json);
        if (index == -1) {
            $('input').val("");           
        }
    }
});

答案 1 :(得分:0)

据我所知documentation,只有在选择下拉项目(点击)时才会设置UI属性,因此您必须在更改功能中添加验证以手动检查值。