在jQuery中分配非顺序数字索引时,如何让我的数组工作?

时间:2010-09-10 16:37:26

标签: jquery xml arrays autocomplete

我有一个从数据库动态创建的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]。

任何指针都会有所帮助。谢谢!

1 个答案:

答案 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,值也会   用作标签。