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.

Techtheater
quelle
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>

999k
quelle
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();
sasi
quelle
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
Klidifia
quelle
6

HTML:

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

JavaScript:

function myNewFunction(element) {
    var text = element.options[element.selectedIndex].text;
    // ...
}

DEMO: http://jsfiddle.net/6dkun/1/

Vision
quelle
siehe diesen Kommentar Ich habe unsere Konversation entfernt, da Sie Ihren Code
repariert haben
3

Verwenden -

$.trim($("select").children("option:selected").text())   //cat

Hier ist die Geige - http://jsfiddle.net/eEGr3/

Ashwin
quelle
2
Wo wird in der Frage jQuery erwähnt?
Mplungjan
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.

Nick Pickering
quelle
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>
Jean-Dadet Diasoluka
quelle
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>


xgqfrms
quelle
-1

Versuchen Sie Folgendes:

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

Siehe hier jsfiddle Beispiel

ericosg
quelle
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