Domanda

Mi chiedo se qualcuno potrebbe suggerire il modo migliore per scorrere in loop tutte le < option > in un elemento < select > con jQuery e costruire un array .

Eg.

Invece di quanto segue, per cui una stringa in è passata a 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
        }
    );

... Devo passare in rassegna tutte le < opzioni > in un < seleziona > e inserirle in un array e passare semplicemente quella variabile di array alla funzione anziché a una stringa lunga.

Per esempio,

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

Le sarei grato se potessi suggerire come inserire elementi in un array nel formato corretto. Ho praticamente sostituito la parte del looping da un altro post su questo sito.

Grazie.

È stato utile?

Soluzione

Questo dovrebbe funzionare:

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

Dato che l'elemento select ha ID sel .

Altri suggerimenti

La funzione jQuery.map potrebbe essere ciò che stai cercando . Il codice seguente creerà un array che contiene tutti i valori o valori di testo per le opzioni < 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;
            });

Tutto quello che devi fare è passare l'array come primo parametro senza parentesi. Le parentesi creano un nuovo array, ma non è necessario farlo perché si sta già passando un array. Basta fare:

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

Se capisco correttamente la tua domanda, il seguente codice dovrebbe fare ciò di cui hai bisogno:

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

L'output della query è già una matrice di opzioni che sono discendenti della selezione, quindi non è necessario inserirle in un'altra matrice. In alternativa, se la tua selezione non ha un ID, ma hai l'elemento DOM:

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

Ricollegando questa idea al tuo codice:

$("#CityLocal").autocompleteArray(
    $("option", theSelect),
    {
            delay:10,
            minChars:1,
            matchSubset:1,
            onItemSelect:selectItem,
            onFindValue:findValue,
            autoFill:true,
            maxItemsToShow:10
    }
);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top