2012-03-27 6 views
43

Ho una matrice dichiarata in uno script:JavaScript - aumento di popolazione a discesa con l'allineamento

var myArray = new Array("1", "2", "3", "4", "5" . . . . . "N"); 

Ho una forma che contiene un menu a discesa:

<form id="myForm"> 
    <select id="selectNumber"> 
    <option>Choose a number</option> 
    </select> 
</form> 

Utilizzando Javascript, come sarà Compro il resto del menu a discesa con i valori dell'array? In modo che le opzioni siano "Scegli un numero", "1", "2", "3", "4", "5". . . . . "N"?

+3

si prega di inviare il vostro tentativo e un messaggio di errore (s) che stai ricevendo. Grazie. – bernie

risposta

66

È necessario scorrere gli elementi dell'array, creare un nuovo nodo DOM per ciascuno e aggiungerlo al proprio oggetto.

var select = document.getElementById("selectNumber"); 
var options = ["1", "2", "3", "4", "5"]; 

for(var i = 0; i < options.length; i++) { 
    var opt = options[i]; 
    var el = document.createElement("option"); 
    el.textContent = opt; 
    el.value = opt; 
    select.appendChild(el); 
}​ 

Live example

+0

Ho un errore 'textContent e value non sono una funzione 'e la soluzione era di ** cast ** optare per String come quello: ' el.textContent = String (opt); el.value = String (opt); ' che è in caso di ** opt ** non è _ ** stringa ** _. –

+0

@AbdallahOkasha Questo non ha senso. Questo errore si verificherebbe se si provasse ad usare 'el.textContent' in questo modo:' el.textContent (opt) '. Se lo si utilizza come nel mio exmaple, non importa se si tratta di un 'numero ', i browser lo trasformeranno in una stringa. –

+0

Grazie per la cura .. in realtà, ho provato a scrivere 'el.textContent = arr [i]' o 'el.value = arr [i]' e ho ricevuto un errore ha detto: ** _ value_, _text_ e _textContent_ non sono funzioni **. –

7

Qualcosa del genere dovrebbe funzionare:

var dropdown = document.getElementById("dropdown1"); 
if (dropdown) { 
    for (var i=0; i < month.length;++i){  
     addOption(dropdown, month[i], month[i]); 
    } 
} 

addOption = function(selectbox, text, value) { 
    var optn = document.createElement("OPTION"); 
    optn.text = text; 
    optn.value = value; 
    selectbox.options.add(optn); 
} 

è possibile fare riferimento a questo articolo per ulteriori dettagli:
http://www.plus2net.com/javascript_tutorial/list-adding.php

4
["1","2","3","4"].forEach(function(item) { 
    var o = document.createElement("option"); 
    o.textContext = item; 
    document.getElementById("myselect").appendChild(o); 
}); 
+1

Funziona solo con browser compatibili con HTML5! –

6

Per prima cosa ottenete il dropdown elem ent dal DOM, quindi scorrere l'array, e aggiungere ogni elemento come una nuova opzione nel menu a discesa in questo modo:

// Get dropdown element from DOM 
var dropdown = document.getElementById("selectNumber"); 

// Loop through the array 
for (var i = 0; i < myArray.length; ++i) { 
    // Append the element to the end of Array list 
    dropdown[dropdown.length] = new Option(myArray[i], myArray[i]); 
}​ 

Vedere JSFiddle per una dimostrazione dal vivo: http://jsfiddle.net/nExgJ/

questo presuppone che sei non usare JQuery e hai solo l'API DOM di base con cui lavorare.

+0

Nota, ho riscontrato questo problema quando ho copiato questo codice: http://stackoverflow.com/questions/4404526/unexpected-token-illegal-in-webkit –

+0

@NielsBrinch - Non copiare e incollare direttamente da JSFiddle. :) – DashK

+0

In realtà ho copiato da Stackovervflow, non il violino, ma forse l'autore dello stackoverflow ha copiato il suo stesso violino e la copia-incolla è stata trasferita! :) –

0
<form id="myForm"> 
<select id="selectNumber"> 
    <option>Choose a number</option> 
    <script> 
     var myArray = new Array("1", "2", "3", "4", "5" . . . . . "N"); 
     for(i=0; i<myArray.length; i++) { 
      document.write('<option value="' + myArray[i] +'">' + myArray[i] + '</option>'); 
     } 
    </script> 
</select> 
</form> 
27

si può anche fare con jQuery:

var options = ["1", "2", "3", "4", "5"]; 
$('#select').empty(); 
$.each(options, function(i, p) { 
    $('#select').append($('<option></option>').val(p).html(p)); 
}); 
+1

Non c'è nessun tag jQuery in questa domanda. –

+17

Penso che non sia necessario votare per una possibile risposta che potrebbe aiutare qualcuno. jQuery è un framework javascript e la domanda ha dichiarato JavaScript. Un comportamento come questo demotiverà le persone a contribuire. –

+0

Vedere http://meta.stackexchange.com/questions/45176/when-is-use-jquery-not-a-valid-answer-to-a-javascript-question –

6

Ho trovato questo funziona anche ...

var select = document.getElementById("selectNumber"); 
var options = ["1", "2", "3", "4", "5"]; 

// Optional: Clear all existing options first: 
select.innerHTML = ""; 
// Populate list with options: 
for(var i = 0; i < options.length; i++) { 
    var opt = options[i]; 
    select.innerHTML += "<option value=\"" + opt + "\">" + opt + "</option>"; 
} 
2

Ho avuto lo stesso requisito, ho usato la soluzione "Alex Turpin" con piccole correzioni come indicato di seguito.

var select = document.getElementById("selectNumber"); 
var options = ["1", "2", "3", "4", "5"]; 

for(var i = 0; i < options.length; i++) { 
    var opt = options[i]; 
    var el = document.createElement("option"); 
el.text = opt; 
    el.value = opt; 
    select.add(el); 
}​ 

correzioni perché con la funzione appendChild() è carica quando il DOM prepara. Quindi non funziona con versioni precedenti (8 o meno) di IE. Quindi con le correzioni sta funzionando bene.

Grazie Alex per la soluzione.

Alcune note sul differences b/w add() and appendChild()

Problemi correlati