jqueryUI自动完成与额外的数据?

时间:2011-05-03 16:27:35

标签: jquery jquery-ui jquery-ui-autocomplete

使用jQueryUI Autocomplete

我想将一些其他数据附加到框中的结果列表中。例如,我的数据集可能如下所示:

[
    {
        "name": "John's wild bacon emporium",
        "code": "BACON"
    },
    {
        "name": "Jill and Jack's well",
        "code": "WELL"
    },
    {
        "name": "Herp and derp",
        "code": "HD"
    }
]

但是jQueryUI文档说它想要一个扁平的字符串数组。

用户将按名称搜索,而不是代码(让我们假装)。更重要的是,我希望能够在查看select: function(event, ui) {/*...*/}时访问该代码,无论是通过data-xxx还是其他一些伏都教。我想避免使用第二个列表来匹配字符串与标签内容(假设我们可以以某种方式重复名称,用户永远不会混淆),我只想将代码数据粘贴到名称标签上。

这样的问题是asked in 2008,但从那以后插件就再没有.result()了。

1 个答案:

答案 0 :(得分:13)

  

但是jQueryUI文档说它想要一个   扁平的字符串数组。

Actually

  

本地数据可以是简单数组   字符串,或包含对象   数组中的每个项目,带有a   标签属性或两者兼而有之。

因此,只要您的数据至少数组中的每个对象都有value属性,小部件就可以处理它:

[
    {
        "name": "John's wild bacon emporium",
        "code": "BACON",
        "value": "Bacon",
    },
    {
        "name": "Jill and Jack's well",
        "code": "WELL"
        "value": "Well"
    },
    {
        "name": "Herp and derp",
        "code": "HD",
        "value": "Herp"
    }
]

用户的查询将与每个对象的value属性进行匹配(请注意,标签不是必需的;如果要在自动完成选项列表中显示不同于{{1}的内容,请仅指定它})。

您可以访问value事件处理程序中的项目的额外数据:

select

希望有所帮助。这是一个简单的例子:http://jsfiddle.net/vR3QH/。我删除了select: function(event, ui) { alert(ui.item.code); // Access the item's "code" property. } 属性,而只使用name属性。每次选择一个项目时,value元素都会使用属于所选项目的属性值进行更新。