【问题标题】:Creating minLength exception in jQueryUI autocomplete在 jQueryUI 自动完成中创建 minLength 异常
【发布时间】:2016-03-11 11:38:47
【问题描述】:

我有一组数据,要求自动完成在写入 3 个字符后显示结果。但是,有一条数据只有两个字符长..('LG')。

所以我的问题是;

有没有办法保留 :minLength:3,同时为输入某些字符(例如 ('LG'))创建异常?

我一直在尝试在成功参数中对结果进行硬编码,如下所示,但它没有按预期工作。我希望我走在正确的轨道上?

这是一个sn-p的代码,以及到目前为止的完整代码;

 success: function (LG, resp) {
         if (LG.length === 2) {
                LG.push({
                  label: 'LG',
                  value: 'LG',
                });
            }
        response(LG);

        var results = [];
        $.each(resp.Q0, function(k, v) {
          if (v.indexOf(request.term.toUpperCase()) >= 0) {
            results.push(v);
          }
        });
        response(results);
      }
    });
  },

https://plnkr.co/edit/wfAoi0sZDdDd0pCufQi9

【问题讨论】:

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


    【解决方案1】:

    我认为一个选项是修改 minChars 并修改成功函数。 我在这里添加代码,告诉我是否适合您的问题。

    $(document).ready(function() {
          setTimeout(function() {
            $('#_Q0').autocomplete({
      source: function(request, response) {
        $.ajax({
          url: "brands.json",
          dataType: "JSON",
          type: "GET",
          success: function (resp) {
            var results = [];
            $.each(resp.Q0, function(k, v) {
               if (request.term.length >= 3 && v.indexOf(request.term.toUpperCase()) >= 0) {
                        results.push(v);
               }
               if (request.term.length == 2 && request.term.toUpperCase() == v) {
                        results.push(v);
               }
            });
            response(results);
          }
        });
      },
      autoFocus: true,
      minLength: 2,
      response: function(event, ui) {
        if (!ui.content.length) {
          var noResult = {
            value: "",
            label: "No results found"
          };
          ui.content.push(noResult);
        } 
      }
    });
    var render = $('#_Q0').autocomplete('instance')._renderMenu;
    $('#_Q0').autocomplete('instance')._renderMenu = function(ul, items) {
      items.push({
        label: 'AUTRE MARQUE',
        value: 'AUTRE MARQUE',
        last: true
      });
      render.call(this, ul, items);
    };
      }, 100);
    });
    

    我不太喜欢的一点是我必须将 minChars 硬编码到成功函数中,也许我们可以找到从属性“minChars”中恢复值的方法

    https://plnkr.co/edit/ygtMteIH1J5EI5KUMU3C?p=preview

    【讨论】:

    • 嗯,似乎在测试您正在编写代码时,一旦您超过 2 或 3 个字符,下拉列表中的选项就会消失,并且所有项目都会在输入前两个字符后出现。也许一个解决方案可以是复制整个代码并更改第二个实例以从包含只有 2 个字符的品牌的不同 JSON 数据集中检索数据?所以本质上,我可以使用 $.each(resp.3charData) 和 $.each(resp.2charData)?
    • 对不起,我弄错了,您必须在第一个条件中添加条件 >= minChars。我编辑了我的回复
    • 哦,好吧!是的,这绝对使它更接近我的意图!谢谢你。但是,一件小事是在输入两个字符后会出现“未找到结果”。他们也是一种修改方法吗?也许通过添加这样的东西; if (!ui.content && ui.content.length == 3)
    • 恐怕现在用户输入2个或更多字符时会触发“未找到结果”,这是将2个字母的关键字的条件添加为“LG”的唯一方法,然后我认为您将不得不忍受 2 个字符的触发器
    • 好吧,我想你不可能拥有一切!谢谢你的帮助!
    猜你喜欢
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    相关资源
    最近更新 更多