jQuery UI自动完成响应索引问题

时间:2018-09-01 09:53:10

标签: jquery response

我正在使用jQuery ui-complete库,该库通过get请求调用端点以填充建议的autors列表:

$("#author-name").autocomplete({
                source: "/authors/get.json",
                minLength: 5,
                select: function(event, ui) {
                    event.preventDefault();
                    $("#author-name").val(ui.item.label);
                    $("#author-id").val(ui.item.value);
                }

});

问题是回复的格式,它包装在索引数组中,如下所示:

{
    "reply": [
        {
            "value": 9,
            "label": "Joe Bloggs"
        },
    ]
}

是否可以通过回复对象告诉响应,例如:

select: function(event, ui.reply) {

我已经阅读了库中的api文档,但是找不到解决方案。

3 个答案:

答案 0 :(得分:1)

source期望有一个数组,因此您将不得不调整为其分配的内容。
在下面的示例中,我简单地创建了一个新函数来获取数据,然后访问{ {1}}数组,这就是我传递给自动完成reply

source
$(document).ready(function() {

  function getResponse() {
    var response = {
      "reply": [{
          "value": 9,
          "label": "Joe Bloggs"
        },
        {
          "value": 10,
          "label": "foo"
        },
      ]
    }; // in your case: read data from /authors/get.json

    return response.reply;
  }

  $("#tags").autocomplete({
    source: getResponse(),
    select: function(event, ui) {
      event.preventDefault();
      console.log(ui.item.value);
      console.log(ui.item.label);
    }
  });
});

答案 1 :(得分:0)

如果使用ECMAScript 6,则可以利用对象分解:

select: function(event, { reply }) {

reply现在将是您可以通过ui.reply访问的内容。

答案 2 :(得分:0)

您也可以通过这种方式使用

select: function(event, ui) {
                event.preventDefault();
                var reply = ui.reply;
//And Because it is an array you should use index on it.
                $("#author-name").val(reply[0].label);
                $("#author-id").val(reply[0].value);
            }