JavaScript ile seçilen seçenek metnini alın


125

Bunun gibi bir açılır listem var:

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

JavaScript kullanarak değer yerine gerçek seçenek metnini nasıl alabilirim? Değeri aşağıdaki gibi bir şeyle elde edebilirim:

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

Ama 7122istediğimden çok cat.


2
stackoverflow.com/a/1085810/1339473 daha fazla yardım için buna bakın
QuokMoon

olası yinelenen JavaScript kullanarak dropdownlist seçilen değeri almak için nasıl? - başlığa rağmen sorunuzu yanıtlıyor.
Felix Kling

Yanıtlar:


228

Seçenekleri deneyin

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>



2
Büyük harf kullanmadan değişim yazmak daha temiz
Simon Baars

95

Düz JavaScript

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

jQuery:

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

1
@mplungjan Neden jQuery'nin kullandığı .textContentve yöntem operasyonu .innerTextiçin yorum yapmıyorsunuz .text()? Standartlara göre değil, kullanmadığı için tamamen yanlış .text. Olumsuz oylar nerede?
VisioN

İnnerHTML nerede?
mplungjan

@mplungjan Değil innerHTML, innerTextdaha da kötü.
VisioN

Şu seçeneği görüyorum: {get: function (elem) {var val = elem.attributes.value; dönüş! val || val. belirtildi mi? elem.value: elem.text;} 1.9
mplungjan

15

Tüm bu işlevler ve rastgele şeyler, bence en iyisi bunu kullanmak ve bunu şu şekilde yapmak:

this.options[this.selectedIndex].text

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/


bu yoruma bakın Kodunuzu düzelttiğinizden beri konuşmamızı kaldırdım
mplungjan


1

Seçeneğin değerini değil, iç HTML'sini almanız gerekir.

this.innerHTMLBunun yerine kullanın this.selectedIndex.

Düzenleme: Önce seçenek öğesini almanız ve ardından innerHTML'yi kullanmanız gerekir.

this.textBunun yerine kullanın this.selectedIndex.


Bu yanlış. Bu grap edecek innerHTMLbir <select>eleman.
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

Fakat :

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

Ve ayrıca bu:

 <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

Bildiğim kadarıyla iki çözüm var.

her ikisi de sadece vanilya javascript kullanmanız gerekir

1 seçiliSeçenek

canlı 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 seçenek

canlı 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

Aşağıdakileri deneyin:

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

Buraya bakın jsfiddle örneği


1
Neden herkes innerHTML konusunda ısrar ediyor ??? .Text kullanın! Ve neden tüm bunları işleve aktaralım? Sadece geç (bunu) ve fonksiyonun ne kullanacağına karar vermesini
sağla

Eh, sanırım daha iyi / daha hızlı olabilir ama @ mplungjan'ın reddini duymak isterim.
Nick Pickering

1
innerHTML, Microsoft tarafından icat edilen kullanışlı bir yöntemdir. Daha sonra daha fazla tarayıcıya kopyalandı, ancak a) standart olmadığı ve b) bir seçenekte
html'ye sahip olamayacağınız için

innerHTMLyine de çok uygun ... Bunun için tüm standartları ve basitliği feda etmeye hazırım. : P
Nick Pickering

1
şahsen .text () ile jQuery ve .innerHTML'yi saf JS ile kullanıyorum ve sadece alışkanlık olarak çerçeveler karıştırırken hatalardan kaçınmama yardımcı oluyor. İnnerHTML'nin tüm tarayıcılarda çalıştığını biliyorum ve bu beni mutlu ediyor :) oh ve OP'nin çözümümle daha kolay ilişki kurabilmesi için her iki işlev parametresini de belirledim, başka bir neden yok.
ericosg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.