Выполните цикл по <select>и создайте массив в формате: «значение1», «значение2», «значение3» - PullRequest
4 голосов
/ 24 октября 2008

Интересно, может ли кто-нибудь предложить лучший способ циклического перебора всех <option> s в элементе <select> с помощью jQuery и построения массива.

Например.

Вместо следующего, посредством которого входные строки передаются в autoCompleteArray (),

$("#CityLocal").autocompleteArray(
        [
            "Aberdeen", "Ada", "Adamsville", "Zoar" //and a million other cities...
        ],
        {
            delay:10,
            minChars:1,
            matchSubset:1,
            onItemSelect:selectItem,
            onFindValue:findValue,
            autoFill:true,
            maxItemsToShow:10
        }
    );

... Мне нужно перебрать все <options> в <select> и вставить их в массив, и просто передать эту переменную массива в функцию вместо длинной строки.

Например,

$("#CityLocal").autocompleteArray(
            [
                MyBigArrayOfOptions
            ],
            {
                delay:10,
                minChars:1,
                matchSubset:1,
                onItemSelect:selectItem,
                onFindValue:findValue,
                autoFill:true,
                maxItemsToShow:10
            }
        );

Буду признателен, если вы подскажете, как помещать данные в массив в правильном формате. Я в значительной степени подозревал зацикливание в другом посте на этом сайте.

Спасибо.

Ответы [ 4 ]

8 голосов
/ 24 октября 2008

Это должно работать:

$(document).ready(function(){
  // array of option elements' values
  var optionValues = [];
  // array of option elements' text
  var optionTexts = [];

  // iterate through all option elements
  $('#sel > option').each(function() {
    // get value/text and push it into respective array
    optionValues.push($(this).val());
    optionTexts.push($(this).text());
  });

  // test with alert
  alert(optionValues);
  alert(optionTexts);
});

Учитывая, что ваш select элемент имеет идентификатор sel .

6 голосов
/ 24 октября 2008

Возможно, вам нужна функция jQuery.map . Приведенный ниже код создаст массив, содержащий все значения или текстовые значения для параметров <select>.

var values = jQuery.map(jQuery("#select")[0].options, function(option)
             {
                return option.value;
             });

var texts = jQuery.map(jQuery("#select")[0].options, function(option)
            {
                return option.innerHTML;
            });
2 голосов
/ 24 октября 2008

Если я правильно понимаю ваш вопрос, следующий код должен сделать то, что вам нужно:

myFunction($("#my-select option"));

Выходные данные запроса уже являются массивом опций, которые являются потомками выбора, поэтому вам не нужно помещать их в другой массив. Кроме того, если ваш выбор не имеет идентификатора, но у вас есть элемент DOM:

myFunction($("option", theSelect));

Включение этой идеи обратно в ваш код:

$("#CityLocal").autocompleteArray(
    $("option", theSelect),
    {
            delay:10,
            minChars:1,
            matchSubset:1,
            onItemSelect:selectItem,
            onFindValue:findValue,
            autoFill:true,
            maxItemsToShow:10
    }
);
2 голосов
/ 24 октября 2008

Все, что вам нужно сделать, это передать массив в качестве первого параметра без скобок. Скобки создают новый массив, но вам не нужно этого делать, потому что вы уже передаете массив. Просто сделай:

$("#CityLocal").autocompleteArray(
                MyBigArrayOfOptions,
                {
                        delay:10,
                        minChars:1,
                        matchSubset:1,
                        onItemSelect:selectItem,
                        onFindValue:findValue,
                        autoFill:true,
                        maxItemsToShow:10
                }
        );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...