JavaScript로 선택한 옵션 텍스트 가져 오기


124

다음과 같은 드롭 다운 목록이 있습니다.

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

JavaScript를 사용하여 값이 아닌 실제 옵션 텍스트를 얻으려면 어떻게해야합니까? 다음과 같은 값을 얻을 수 있습니다.

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

하지만 7122내가 원하는 것보다 cat.



JavaScript를 사용하여 드롭 다운 목록의 선택한 값을 얻는 방법의 중복 가능성이 있습니까? -제목에도 불구하고 귀하의 질문에 대한 답변입니다.
Felix Kling 2013

답변:


226

옵션 시도

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
정규식을 사용하려고 할 때 첫 번째 규칙
Mirror318

2
그것은 자본 C없이 onchange를 작성하는 더 깨끗
사이먼 Baars

91

일반 JavaScript

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

jQuery :

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

1
@mplungjan 왜 여기에 jQuery를 사용하는 것을 언급하지 않는 .textContent.innerText에 대한 .text()방법 작업을? 그것은 표준에 의한 것이 아니라를 사용하지 않기 때문에 완전히 잘못되었습니다 .text. 반대표는 어디에 있습니까?
VisioN 2013

innerHTML은 어디에 있습니까?
mplungjan 2013

@mplungjan 그것은 아닙니다 innerHTML, innerText더 나쁩니다.
VisioN 2013

나는 옵션을 본다 : {get : function (elem) {var val = elem.attributes.value; return! val || val.specified? elem.value : elem.text;} in 1.9
mplungjan 2013

15

이 모든 기능과 임의의 것, 나는 이것을 사용하는 것이 가장 좋다고 생각하고 다음과 같이하십시오.

this.options[this.selectedIndex].text

6

HTML :

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

자바 스크립트 :

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

데모 : http://jsfiddle.net/6dkun/1/


이 댓글을 당신이 당신의 코드를 고정하기 때문에 나는 우리의 대화를 제거
mplungjan


1

옵션의 값이 아닌 innerHTML을 가져와야합니다.

사용 this.innerHTML대신에 this.selectedIndex.

편집 : 먼저 옵션 요소를 가져온 다음 innerHTML을 사용해야합니다.

사용 this.text대신에 this.selectedIndex.


이것은 잘못된 것입니다. innerHTMLof <select>요소 를 파악합니다 .
VisioN 2013

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

하지만 :

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

그리고 이것도 :

 <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

내가 아는 한 두 가지 해결책이 있습니다.

바닐라 자바 ​​스크립트를 사용하기 만하면되는 두 가지

1 선택됨 옵션

라이브 데모

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 가지 옵션

라이브 데모

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

아래를 시도하십시오.

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

여기를 참조 하십시오 jsfiddle 샘플


1
모두가 innerHTML을 주장하는 이유는 무엇입니까 ??? .text 사용! 그리고 그 모든 것을 함수에 전달하는 이유. (this)를 통과하고 함수가 무엇을 사용할지 결정하게하십시오
mplungjan

어, 더 빠르고 더 좋을 것 같지만 @mplungjan의 반박을 듣고 싶습니다.
Nick Pickering 2013

1
innerHTML은 Microsoft에서 개발 한 편리한 방법입니다. 그런 다음 더 많은 브라우저에 복사되었지만 a) 표준이 아니고 b) 옵션에 html을 포함 할 수 없기 때문에 옵션에 .value와 .text가있을 때 문제를 혼동 할 필요가 전혀 없습니다
mplungjan

innerHTML그래도 매우 편리합니다 ... 저는 모든 표준과 단순성을 기꺼이 희생 할 것입니다. : P
Nick Pickering 2013

1
개인적으로 나는 jQuery와 함께 .text ()를 사용하고 순수 JS와 함께 .innerHTML을 사용하며 습관에 의해서만 프레임 워크를 믹스 매치 할 때 실수를 피하도록 도와줍니다. 나는 innerHTML이 모든 브라우저에서 작동한다는 것을 알고 있고 그것은 나를 행복하게 만든다. :) 오 그리고 나는 OP가 다른 이유없이 내 솔루션과 더 쉽게 관련 될 수 있도록 두 함수 매개 변수를 모두 지정했다.
ericosg 2013
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.