【问题标题】:Get selected object from jQuery Autocomplete从 jQuery 自动完成中获取选定的对象
【发布时间】:2018-04-22 01:54:01
【问题描述】:

我正在使用jQuery 1.8 Autocomplete

有没有办法在事件处理程序之一之外获取所选对象?

我正在尝试做类似...

 $("#searchUsers").autocomplete({
        source: 'Users/List',
  });

  $("#addUser").click(function() {
       // get the selected user Id
       var item = $("#searchUsers").autocomplete('selected');
       alert(item.Id);
  });

我看不出有什么办法,但这似乎是一个很明显的要求。

【问题讨论】:

  • 不会$("#searchUsers").val() 给你想要的吗?
  • 不,我想要的是对象而不是值。

标签: jquery autocomplete jquery-autocomplete


【解决方案1】:

我遇到了同样的问题。我可以将所选项目作为对象访问。

$("#searchUsers").data("autocomplete").selectedItem

【讨论】:

    【解决方案2】:

    默认行为是当项目被选中时,值被放置在文本框中。所以你可以通过 $("#searchUsers").val() 得到它。

    如果您需要来自所选项目的更多信息,则需要传递 select 事件处理程序,并在该处理程序内将信息存储在其他位置。

    【讨论】:

    • 这就是我目前正在做的事情,但它很老套,而且还有点小车。我希望有一种更清洁的方式来做到这一点。
    【解决方案3】:

    select 事件添加到您的自动完成功能中:

    search: function (event, ui) {
            $("#searchUsers").val('');
        },
    select: function (event, ui) {
       foo = ui.item.label;
        $("#bar").val(ui.item.id);
       baz = (ui.item.JsonField);
    }
    

    查看事件标签here

    编辑:search 事件添加到函数中。每次用户进行搜索时,我都会使用 search 事件来清除字段/变量

    【讨论】:

    • 作为问题,我不想要一个事件。
    • 为什么不呢?因为这就是你所需要的
    • 因为我必须将变量存储在某处,然后还附加一个更改事件以清除变量,因为 select 仅在选择真实值时更新。我专门问了这个问题,因为我想避免不得不这样做,而且通常 jQuery 是经过深思熟虑的,可以提供一些机制来为你处理这些事情。
    • 否,因为搜索事件仅在满足 minLengthdelay 条件后触发。如果您想使用事件来执行此操作,则必须使用 change,如我之前的评论中所述。您的更新准确地展示了这种方法是如何导致错误的,以及为什么库确实应该提供一个简单的机制来做到这一点。
    【解决方案4】:

    老问题,但仍然...

    只需定义一个 JavaScript 变量,然后在选择事件中,将 object 设置为该变量。例如:

    $(function () {
        var object_selected= -1;
        $("#q").autocomplete({
                source: "path/to/jsondata",
                minLength: 3,
                select: function (event, ui) { //This is the event that you need to implement
                    $('#q').val(ui.item.value);
                    object_selected = ui.item; //This is what you will use later.
                    return true;
                }
        });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      相关资源
      最近更新 更多