Как я могу заставить мой массив работать при назначении непоследовательных числовых индексов в jQuery? - PullRequest
1 голос
/ 10 сентября 2010

У меня есть файл XML, динамически создаваемый из базы данных, в которой каждый элемент имеет идентификатор и имя. В следующем синтаксисе:

<item>
   <id>1</id>
   <name>FirstName</name>
</item>

... и так далее ...

Я пытаюсь использовать эти значения для автозаполнения jQuery, где идентификатор будет отправлен через форму, когда имя выбрано из автозаполнения.

Я пробовал следующий блок кода (выполняется с кнопки внутри формы):

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});
    }});
}

Однако это не работает, поскольку идентификаторы начинаются с 1, а массив ищет нулевой индекс, поэтому, когда я предупреждаю myList, он всплывает с FirstName, SecondName (вместо FirstName, SecondName - без начальных запятых).

Я пытался создать массив объектов, но это немного более загадочно для меня, так как мое предупреждение возвращает [объектный объект] для каждого элемента.

Любые указатели были бы полезны. Спасибо!

1 Ответ

1 голос
/ 10 сентября 2010

Если вы хотите, чтобы атрибут имени отображался как «метка» элемента, а идентификатор был «значением», вы можете сделать это:

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});  
});

Соответствующая выдержка из документации :

Локальные данные могут быть простым массивом строк или содержит объекты для каждый элемент в массиве, либо с свойство label или value или оба. свойство label отображается в меню предложений. Значение будет вставляется в элемент ввода после пользователь выбрал что-то из меню. Если только одно свойство указано, он будет использоваться для обоих, например. если вы предоставите только значение-свойства, значение также будет использовать в качестве метки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...