2012-03-27 23 views
43

He declarado una matriz en una secuencia de comandos:JavaScript - poblar la lista desplegable con arreglo

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

Tengo un formulario que contiene un menú desplegable:

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

uso de JavaScript, ¿cómo ¿Rellenaré el resto del menú desplegable con los valores de la matriz? De modo que las opciones serán "Elija un número", "1", "2", "3", "4", "5". . . . . "NORTE"?

+3

por favor, puesto que su intento y cualquier mensaje (s) de error que está recibiendo. Gracias. – bernie

Respuesta

66

Tendrá que recorrer los elementos de la matriz, crear un nuevo nodo DOM para cada uno y anexarlo a su objeto.

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

Tengo un error 'textContent & value no es una función' y la solución era ** fundir ** opt to String like that: ' el.textContent = String (opt); el.value = String (opt); ' que en el caso de ** opt ** no es _ ** String ** _. –

+0

@AbdallahOkasha Eso no tiene sentido. Ese error ocurriría si intentara usar 'el.textContent' de la siguiente manera:' el.textContent (opt) '. Si lo usa como en mi ejemplo, no importa si es un 'número', los navegadores lo convertirán en una cadena. –

+0

Gracias por cuidar ... de hecho, he intentado escribir 'el.textContent = arr [i]' o 'el.value = arr [i]' y tengo un error que dice: ** _ value_, _text_ y _textContent_ no son funciones **. –

7

Algo como esto debería funcionar:

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

puede hacer referencia a este artículo para más detalles:
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

¡Esto solo funciona en navegadores compatibles con HTML5! –

6

Usted primero consigue el elem desplegable ento de la DOM, a continuación, recorrer la matriz, y añadir cada elemento como una nueva opción en el menú desplegable de la siguiente manera:

// 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]); 
}​ 

Ver jsFiddle para una demostración en vivo: http://jsfiddle.net/nExgJ/

Esto supone que eres no usa JQuery, y usted solo tiene la API de DOM básica para trabajar.

+0

Nota, encontré este problema cuando copié y pegué este código: http://stackoverflow.com/questions/4404526/unexpected-token-illegal-in-webkit –

+0

@NielsBrinch - No copie y pegue directamente de JSFiddle. :) – DashK

+0

Copié y pegué de Stackovervflow, no del violín, pero tal vez el autor de stackoverflow copió de su propio violín y el copy-paste se transfirió. :) –

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

También puede hacerlo 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

No hay una etiqueta jQuery en esta pregunta. –

+17

Creo que es innecesario votar por una posible respuesta que podría ayudar a alguien. jQuery es un marco de JavaScript y la pregunta dice JavaScript. Comportamiento como este desmotivará a las personas a contribuir. –

+0

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

6

me encontré con esto también funciona ...

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

que tenían el mismo requisito, solía solución "Alex Turpin" con pequeñas correcciones como se menciona a continuación.

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

correcciones porque con la función appendChild() es cargas cuando el DOM prepara. Por lo tanto, no funciona en versiones antiguas (8 o menos) de IE. Entonces con las correcciones funciona bien.

Gracias Alex por su solución.

Algunas notas sobre differences b/w add() and appendChild()

Cuestiones relacionadas