【问题标题】:Jquery Autocomplete from json list all elements来自json的Jquery Autocomplete列出所有元素
【发布时间】:2023-03-15 02:11:01
【问题描述】:

在我的自动完成脚本中,我设置了一个 json 文件:

脚本

<script type="text/javascript">
  $("#tags").autocomplete({
    source: function(request, response) {
      $.ajax({
        url: "test.json",
        dataType: "json",
        data: { term: request.term },
        success: function(data) {
          response($.map(data, function(item) {
            return { label: item.name_test };
          }));
        }
      });
    }
  });
</script>

HTML

<div class="ui-widget">
  <label for="tags">Tags: </label>
  <input id="tags">
</div>

JSON 文件

[{
  "id_test": "7",
  "name_test": "Tejido",
  "price": "65"
}, {
  "id_test": "8",
  "name_test": "Semen",
  "price": "120"
}, {
  "id_test": "6",
  "name_test": "Saliva",
  "price": "20"
}, {
  "id_test": "2",
  "name_test": "Analisis urinario",
  "price": "150"
}, {
  "id_test": "3",
  "name_test": "Analisis sanguineo",
  "price": "1502"
}, {
  "id_test": "4",
  "name_test": "Analisis fecal",
  "price": "20"
}]

但是当我在输入中输入一个名字时,所有的元素都会被列出来。

我的错误是什么?

【问题讨论】:

  • 您是否在服务器上过滤您的结果?因为你应该是。
  • 没有过滤,我知道这是自动完成的目的,列出相同或相似的元素

标签: jquery json ajax jquery-ui jquery-ui-autocomplete


【解决方案1】:

当您使用远程源时,正如您的代码正在使用的那样,您必须需要在服务器端或来自 ajax 调用的 success 回调中过滤结果。在你的情况下,你可以使用类似的东西:

...
success: function (data) {
    var tag_val = $("#tags").val();
    response($.map(data, function (item) {

        //filtering results....
        if (item.name_test.indexOf(tag_val) != -1) {
            return {
                label: item.name_test
            };
        }
    }));
}

【讨论】:

  • @Samueledrei 不客气。只是指出这不是最好的方法,因为你总是得到整个 json 来过滤一些结果。最好的方法是在服务器端过滤或不使用远程源
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
  • 2012-03-07
  • 1970-01-01
相关资源
最近更新 更多