Holen Sie sich ausgewählten Optionstext mit JavaScript


124

Ich habe eine Dropdown-Liste wie diese:

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

Wie kann ich den tatsächlichen Optionstext anstelle des Werts mit JavaScript abrufen? Ich kann den Wert mit so etwas wie:

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

Aber anstatt dass 7122ich will cat.


2
stackoverflow.com/a/1085810/1339473 Weitere Hilfe finden Sie hier
QuokMoon

Mögliches Duplikat von Wie erhalte ich den ausgewählten Wert der Dropdown-Liste mit JavaScript? - Trotz des Titels beantwortet es Ihre Frage.
Felix Kling

Antworten:


225

Probieren Sie Optionen aus

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
Erste Regel beim Versuch, Regex zu verwenden - suchen Sie weiter nach Stapelüberlauf, bis Sie die Lösung sehen, die keinen Regex benötigt
Prost

2
Es ist sauberer, Wechselgeld ohne Großbuchstaben zu schreiben. C
Simon Baars

91

Einfaches JavaScript

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

jQuery:

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

1
@mplungjan Warum kommentieren Sie hier nicht, dass jQuery .textContentund .innerTextfür die .text()Methodenoperation verwendet? Es ist nicht nach Maßstäben, es ist völlig falsch, weil es nicht verwendet wird .text. Wo sind die Abstimmungen?
VisioN

Wo ist das innerHTML?
Mplungjan

@mplungjan Es ist nicht innerHTML, innerTextist noch schlimmer.
VisioN

Ich sehe Option: {get: function (elem) {var val = elem.attributes.value; return! val || val.specified? elem.value: elem.text;} in 1.9
mplungjan

15

All diese Funktionen und zufälligen Dinge, ich denke, es ist am besten, dies zu verwenden und es so zu machen:

this.options[this.selectedIndex].text



1

Sie müssen das innerHTML der Option und nicht ihren Wert abrufen.

Verwenden Sie this.innerHTMLanstelle von this.selectedIndex.

Bearbeiten: Sie müssen zuerst das Optionselement abrufen und dann innerHTML verwenden.

Verwenden Sie this.textanstelle von this.selectedIndex.


Das ist falsch. Es wird das innerHTMLof- <select>Element erfassen .
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

Aber :

 <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"

Und auch das:

 <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

Soweit ich weiß, gibt es zwei Lösungen.

beide, die nur Vanille-Javascript verwenden müssen

1 selectedOptions

Live-Demo

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 Optionen

Live-Demo

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

Versuchen Sie Folgendes:

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

Siehe hier jsfiddle Beispiel


1
Warum bestehen alle auf innerHTML ??? Verwenden Sie .text! Und warum all das Zeug an die Funktion weitergeben?
Übergeben Sie

Eh, ich denke, es könnte besser / schneller sein, aber ich würde gerne @ mplungjans Gegenargument hören.
Nick Pickering

1
innerHTML ist eine von Microsoft erfundene Komfortmethode. Es wurde dann in mehr Browser kopiert, aber da a) es nicht Standard ist und b) Sie kein HTML in einer Option haben können, besteht absolut keine Notwendigkeit, das Problem zu verwechseln, wenn eine Option .value und .text
mplungjan

innerHTMList aber so bequem ... Ich bin bereit, alle Standards und Einfachheit dafür zu opfern. : P
Nick Pickering

1
Ich persönlich verwende .text () mit jQuery und .innerHTML mit reinem JS und helfe mir, Fehler beim Mixmatching von Frameworks nur aus Gewohnheit zu vermeiden. Ich weiß, dass innerHTML in allen Browsern funktioniert und das freut mich :) Oh, und ich habe beide Funktionsparameter angegeben, damit sich das OP ohne anderen Grund leichter auf meine Lösung beziehen kann.
Ericosg
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.