Obtener el texto de la opción seleccionada con JavaScript


124

Tengo una lista desplegable como esta:

<select id="box1">
<option value="98">dog</option>
<option value="7122">cat</option>
<option value="142">bird</option>
</select>

¿Cómo puedo obtener el texto de la opción real en lugar del valor usando JavaScript? Puedo obtener el valor con algo como:

<select id="box1" onChange="myNewFunction(this.selectedIndex);" >

Pero en lugar de lo 7122que quiero cat.


2
stackoverflow.com/a/1085810/1339473 vea esto para obtener más ayuda
QuokMoon

posible duplicado de ¿Cómo obtener el valor seleccionado de la lista desplegable usando JavaScript? - a pesar del título, responde a tu pregunta.
Felix Kling

Respuestas:


226

Probar opciones

function myNewFunction(sel) {
  alert(sel.options[sel.selectedIndex].text);
}
<select id="box1" onChange="myNewFunction(this);">
  <option value="98">dog</option>
  <option value="7122">cat</option>
  <option value="142">bird</option>
</select>


28
Primera regla al intentar usar expresiones regulares: siga buscando Stack Overflow hasta que vea la solución que no necesita
expresiones regulares

2
Es más limpio escribir sobre el cambio sin c mayúscula
Simon Baars

93

JavaScript simple

var sel = document.getElementById("box1");
var text= sel.options[sel.selectedIndex].text;

jQuery:

$("#box1 option:selected").text();

1
@mplungjan ¿Por qué no comenta aquí que jQuery usa .textContenty .innerTextpara la .text()operación del método? No es por estándares, está totalmente equivocado porque no se usa .text. ¿Dónde están los votos negativos?
VisioN

¿Dónde está el innerHTML?
mplungjan

@mplungjan No lo es innerHTML, innerTextes aún peor.
VisioN

Veo la opción: {get: function (elem) {var val = elem.attributes.value; return! val || val.especificado? elem.value: elem.text;} en 1.9
mplungjan

15

Todas estas funciones y cosas aleatorias, creo que es mejor usar esto y hacerlo así:

this.options[this.selectedIndex].text



1

Deberá obtener el innerHTML de la opción, y no su valor.

Utilizar en this.innerHTMLlugar de this.selectedIndex.

Editar: primero deberá obtener el elemento de opción y luego usar innerHTML.

Utilizar en this.textlugar de this.selectedIndex.


Esto está mal. Será el grap innerHTMLde <select>elemento.
VisioN

1
 <select class="cS" onChange="fSel2(this.value);">
     <option value="0">S?lectionner</option>
     <option value="1">Un</option>
     <option value="2" selected>Deux</option>
     <option value="3">Trois</option>
 </select>

 <select id="iS1" onChange="fSel(options[this.selectedIndex].value);">
     <option value="0">S?lectionner</option>
     <option value="1">Un</option>
     <option value="2" selected>Deux</option>
     <option value="3">Trois</option>
 </select><br>

 <select id="iS2" onChange="fSel3(options[this.selectedIndex].text);">
     <option value="0">S?lectionner</option>
     <option value="1">Un</option>
     <option value="2" selected>Deux</option>
     <option value="3">Trois</option>
 </select>

 <select id="iS3" onChange="fSel3(options[this.selectedIndex].textContent);">
     <option value="0">S?lectionner</option>
     <option value="1">Un</option>
     <option value="2" selected>Deux</option>
     <option value="3">Trois</option>
 </select>

 <select id="iS4" onChange="fSel3(options[this.selectedIndex].label);">
     <option value="0">S?lectionner</option>
     <option value="1">Un</option>
     <option value="2" selected>Deux</option>
     <option value="3">Trois</option>
 </select>

 <select id="iS4" onChange="fSel3(options[this.selectedIndex].innerHTML);">
     <option value="0">S?lectionner</option>
     <option value="1">Un</option>
     <option value="2" selected>Deux</option>
     <option value="3">Trois</option>
 </select>

 <script type="text/javascript"> "use strict";
   const s=document.querySelector(".cS");

 // options[this.selectedIndex].value
 let fSel = (sIdx) => console.log(sIdx,
     s.options[sIdx].text, s.options[sIdx].textContent, s.options[sIdx].label);

 let fSel2= (sIdx) => { // this.value
     console.log(sIdx, s.options[sIdx].text,
         s.options[sIdx].textContent, s.options[sIdx].label);
 }

 // options[this.selectedIndex].text
 // options[this.selectedIndex].textContent
 // options[this.selectedIndex].label
 // options[this.selectedIndex].innerHTML
 let fSel3= (sIdx) => {
     console.log(sIdx);
 }
 </script> // fSel

Pero :

 <script type="text/javascript"> "use strict";
    const x=document.querySelector(".cS"),
          o=x.options, i=x.selectedIndex;
    console.log(o[i].value,
                o[i].text , o[i].textContent , o[i].label , o[i].innerHTML);
 </script> // .cS"

Y también esto:

 <select id="iSel" size="3">
     <option value="one">Un</option>
     <option value="two">Deux</option>
     <option value="three">Trois</option>
 </select>


 <script type="text/javascript"> "use strict";
    const i=document.getElementById("iSel");
    for(let k=0;k<i.length;k++) {
        if(k == i.selectedIndex) console.log("Selected ".repeat(3));
        console.log(`${Object.entries(i.options)[k][1].value}`+
                    ` => ` +
                    `${Object.entries(i.options)[k][1].innerHTML}`);
        console.log(Object.values(i.options)[k].value ,
                    " => ",
                    Object.values(i.options)[k].innerHTML);
        console.log("=".repeat(25));
    }
 </script>

1

Hay dos soluciones, hasta donde yo sé.

ambos que solo necesitan usar javascript vanilla

1 opciones seleccionadas

demo en vivo

const log = console.log;
const areaSelect = document.querySelector(`[id="area"]`);

areaSelect.addEventListener(`change`, (e) => {
  // log(`e.target`, e.target);
  const select = e.target;
  const value = select.value;
  const desc = select.selectedOptions[0].text;
  log(`option desc`, desc);
});
<div class="select-box clearfix">
  <label for="area">Area</label>
  <select id="area">
    <option value="101">A1</option>
    <option value="102">B2</option>
    <option value="103">C3</option>
  </select>
</div>

2 opciones

demo en vivo

const log = console.log;
const areaSelect = document.querySelector(`[id="area"]`);

areaSelect.addEventListener(`change`, (e) => {
  // log(`e.target`, e.target);
  const select = e.target;
  const value = select.value;
  const desc = select.options[select.selectedIndex].text;
  log(`option desc`, desc);
});
<div class="select-box clearfix">
  <label for="area">Area</label>
  <select id="area">
    <option value="101">A1</option>
    <option value="102">B2</option>
    <option value="103">C3</option>
  </select>
</div>



-1

Prueba lo siguiente:

myNewFunction = function(id, index) {
    var selection = document.getElementById(id);
    alert(selection.options[index].innerHTML);
};

Vea aquí la muestra de jsfiddle


1
¿Por qué todos insisten en innerHTML ??? Utilice .text! Y por qué pasar todo eso a la función. Simplemente pase (esto) y
haga

Eh, creo que podría ser mejor / más rápido, pero me gustaría escuchar la refutación de @ mplungjan.
Nick Pickering

1
innerHTML es un método de conveniencia inventado por Microsoft. Luego se copió en más navegadores, pero dado que a) no es estándar yb) no puede tener html en una opción, no hay absolutamente ninguna necesidad de confundir el problema cuando una opción tiene .value y .text
mplungjan

innerHTMLSin embargo, es muy conveniente ... Estoy dispuesto a sacrificar todos los estándares y la simplicidad por eso. : P
Nick Pickering

1
personalmente uso .text () con jQuery y .innerHTML con JS puro y me ayuda a evitar errores al mezclar marcos de trabajo, solo por hábito. Sé que innerHTML funciona en todos los navegadores y eso me hace feliz :) Ah, y especifiqué ambos parámetros de función para que el OP pueda relacionarse más fácilmente con mi solución, sin otra razón.
ericosg
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.