首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery用户界面自动完成响应索引问题

jQuery用户界面自动完成响应索引问题
EN

Stack Overflow用户
提问于 2018-09-01 09:53:09
回答 3查看 41关注 0票数 0

我使用的是jQuery ui完整库,它通过get请求调用端点,以填充建议的autors列表:

代码语言:javascript
复制
$("#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);
                }

});

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

代码语言:javascript
复制
{
    "reply": [
        {
            "value": 9,
            "label": "Joe Bloggs"
        },
    ]
}

是否可以从reply对象中判断要处理的响应,比如:

代码语言:javascript
复制
select: function(event, ui.reply) {

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-09-02 18:35:05

source需要一个数组,所以您必须调整分配给它的内容。

在下面的示例中,我简单地创建了一个新函数来获取数据,然后访问reply数组,这就是我传递给自动完成source的内容。

代码语言:javascript
复制
$(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);
    }
  });
});
代码语言:javascript
复制
<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>

票数 1
EN

Stack Overflow用户

发布于 2018-09-01 10:19:42

如果使用ECMAScript 6,则可以使用对象析构:

代码语言:javascript
复制
select: function(event, { reply }) {

现在,reply将是您将使用ui.reply访问的内容。

票数 0
EN

Stack Overflow用户

发布于 2018-09-01 11:01:31

您也可以这样使用它。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52126976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档