jQuery 自动完成通过自动完成数据添加附加数据

标签 jquery jquery-autocomplete

我有一个输入字段(文本),我想对多个名称执行自动完成。它的作用类似于 Gmail 中的“收件人:”字段,用户输入名称并按 Enter 并继续。问题是我有一个名称列表,这就是添加到输入字段中的内容,据我所知,一旦提交,只有字段字符串会发送到服务器。问题是当有两个人同名时,因此:John Smith, Bob, John Smith 可能会被输入,并且该字符串将被发送到服务器。

在后端,所有用户都有一个唯一的 ID。有什么办法可以让用户的名字成为自动完成源,但将他们的 ID 发送到服务器吗?

我正在使用 jQuery 1.5.1 和这个插件:jQuery UI Autocomplete

最佳答案

标准搜索将提供您需要的一切。您只需使用 $.map() 函数即可从服务器响应中获取所需的数据。示例:

...
success: function (data) {
   response($.map(data.d, function (item) {
      return {
         id: item.ContactId,
         value: item.LastName + ", " + item.FirstName
      }
   }))
}
...

然后将所选项目(包括 ID 和名称)存储在输入的 $().data() 变量中。示例:

...
select: function (event, ui) {
   $(this).data("Selected", item);
}
...

现在,当您准备好将值发回服务器时,您只需发送所选条目的 ID,如下所示:

var idToSend = $("#autoComplete").data("Selected").id;

我希望这会有所帮助。祝你好运!

* * 编辑 * *

抱歉,$.map() 是一个 split 的想法。我的示例中的 data.d 是 .NET 特定的,但有两个属性是自动完成插件的 native 属性(.value.label >).

如果 .label 不存在,则

.value 将显示并存储;否则,.value 将被视为存储在输入后选择中的值,而 .label 将是下拉列表中显示的值。

关于jQuery 自动完成通过自动完成数据添加附加数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5638241/

相关文章:

javascript - 窗口滚动条触底查询更多数据

jquery - 为什么需要 chrome.tabs.executeScript() 来更改当前网站 DOM?如何使用 jQuery 来达到相同的效果?

javascript - 在一个页面的多个输入中实现 jQuery 自动完成

javascript - jQuery AutoComplete 依赖缓存问题

javascript - 自动完成 json 数据

javascript - 日期之间耗时

javascript - 比较两个使用日期选择器的日期

jquery - Kendo Ui 窗口在相关容器内调整大小问题

javascript - jquery 自动完成焦点元素增加字体大小

javascript - PHP 在 Jquery UI 自动完成中显示数组