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.