Проблема с индексом ответа автозаполнения интерфейса jQuery - PullRequest
0 голосов
/ 01 сентября 2018

Я использую библиотеку jQuery ui-complete, которая вызывает конечную точку через запрос get для заполнения списка предлагаемых авторов:

$("#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 голосов
/ 01 сентября 2018

Вы также можете использовать его таким образом

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);
            }
0 голосов
/ 02 сентября 2018

source ожидает массив, поэтому вам придется настроить то, что вы ему назначаете.
В приведенном ниже примере я просто создал новую функцию для получения данных и доступа к массиву 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);
    }
  });
});
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.css" />

<div class="ui-widget">
  <label for="tags">Tags: </label>
  <input id="tags">
</div>
0 голосов
/ 01 сентября 2018

Если вы используете ECMAScript 6, вы можете использовать деструктуризацию объекта:

select: function(event, { reply }) {

reply теперь будет тем, к чему вы обращаетесь с помощью ui.reply.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...