我有一个从数据库动态创建的XML文件,其中每个项目都有id和name。在以下语法中:
<item>
<id>1</id>
<name>FirstName</name>
</item>
......等等......
我正在尝试将这些值用于jQuery自动完成,当从自动完成中选择名称时,将通过表单提交ID。
我尝试了以下代码块(从表单中的按钮执行):
function listItems(){
var dataString = "";
dataString += $("form#getItemsForm").serialize();
$.ajax({ type: 'GET', url: 'myXML.xml', dataType: 'xml', success: function(xml){
var myList = new Array();
$('restaurant', xml).each(function() {
var myId = Number($(this).find('id').text());
var myName = $(this).find('name').text();
myList[myId] = myName;
});
alert(myList);
$('.listItems').autocomplete({source:myList});
}});
}
然而,这不起作用,因为ID从1开始并且数组正在搜索零索引,所以当我警告myList时,它弹出FirstName,SecondName(而不是FirstName,SecondName - 没有前导逗号)。
我已经尝试制作一个对象数组,但这对我来说有点神秘,因为我的警报会为每个项目返回[object Object]。
任何指针都会有所帮助。谢谢!
答案 0 :(得分:1)
如果您希望name属性显示为项目的“标签”而ID显示为“值”,则可以执行以下操作:
var myList = [];
$('restaurant', xml).each(function() {
var myId = Number($(this).find('id').text());
var myName = $(this).find('name').text();
myList.push({label: myName, value: myId});
});
documentation的相关摘录:
本地数据可以是一个简单的数组 字符串,或包含对象 数组中的每个项目,带有a 标签或价值属性或两者。该 label属性显示在 建议菜单。价值将是 之后插入到input元素中 用户从中选择了一些东西 菜单。如果只有一个属性 指定,它将用于两者, 例如。如果你只提供 value-properties,值也会 用作标签。