2011-04-12 22 views
6

Dado un elemento de formulario HTML como:Selección de un elemento de opción en un menú desplegable por su valor de texto

<select id='mydropdown'> 
    <option value='foo'>Spam</option> 
    <option value='bar'>Eggs</option> 
</select> 

Sé que puedo seleccionar la primera opción con

document.getElementById("mydropdown").value='foo' 

Sin embargo, decir que tengo una variable con el valor "Spam"; ¿Puedo seleccionar un elemento desplegable por su texto en lugar de su valor?

Respuesta

25
var desiredValue = "eggs" 
var el = document.getElementById("mydropdown"); 
for(var i=0; i<el.options.length; i++) { 
    if (el.options[i].text == desiredValue) { 
    el.selectedIndex = i; 
    break; 
    } 
} 
+0

simplemente reemplace texto en el código anterior por innerHTML –

+0

para (var i = 0; i clarifier

1

Utilizaría el selectedIndex o un bucle para seleccionar la opción por texto, el código siguiente no funciona.

document.getElementById("mydropdown").text = 'Eggs'; 
+0

No deseo el texto del valor actualmente seleccionado; Quiero establecer el valor basado en el texto. Sin embargo, el bucle a través de 'el.options' y la búsqueda del atributo' .text' correcto parece prometedor. – geoffspear

+0

Sí, creo que esa es su mejor apuesta – daniellmb

0

Si desea obtener una opción por su InnerText y no por el valor que puede hacer esto:

function go(){ 
    var dropdown = document.getElementById('mydropdown'); 
    var textSelected = 'Spam'; 

    for(var i=0, max=dropdown.children.length; i<max; i++) { 
     if(textSelected == dropdown.children[i].innerHTML){ 
      alert(textSelected); 
      return; 
     } 
    } 
} 
+1

¿Alguna razón por la que está usando la colección de niños frente a dropdown.options y dropdown.options [i] .text? – daniellmb

+0

No hay un motivo específico, simplemente lo escribí. – Vismari

0

antigua IE no maneja las opciones de un selecto como nodos secundarios, pero todos los navegadores implementan la propiedad de texto de la colección de opciones de un selecto.

function selectbytext(sel, txt){ 
    if(typeof sel== 'string'){ 
     sel= document.getELementById(sel) || document.getELementsByName(sel)[0]; 
    } 
    var opts= sel.options; 
    for(var i= 0, L= opts.length; i<L; i++){ 
     if(opts[i].text== txt){ 
      sel.selectedIndex= i; 
      break; 
     } 
    } 
    return i; 
} 
Cuestiones relacionadas