รับข้อความตัวเลือกที่เลือกด้วย JavaScript


125

ฉันมีรายการแบบเลื่อนลงดังนี้:

<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มากกว่า


2
stackoverflow.com/a/1085810/1339473ดูสิ่งนี้เพื่อขอความช่วยเหลือเพิ่มเติม
QuokMoon

เป็นไปได้ที่จะซ้ำกันของวิธีรับค่าที่เลือกของรายการแบบเลื่อนลงโดยใช้ JavaScript? - แม้จะมีชื่อเรื่อง แต่ก็ตอบคำถามของคุณได้
Felix Kling

คำตอบ:


228

ลองใช้ตัวเลือก

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
กฎข้อแรกเมื่อพยายามใช้ regex - ค้นหา Stack Overflow ต่อไปจนกว่าคุณจะเห็นโซลูชันที่ไม่ต้องใช้ regex - ไชโย :)
Mirror318

2
การเขียน onchange โดยไม่มีทุน c
Simon Baars

95

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

innerHTML อยู่ที่ไหน?
mplungjan

@mplungjan มันไม่ได้innerHTML, innerTextจะยิ่งเลวร้ายลง
VisioN

ฉันเห็นตัวเลือก: {get: function (elem) {var val = elem.attributes.value; กลับ! วาล || val.specified? elem.value: elem.text;} ใน 1.9
mplungjan

15

ฟังก์ชั่นและสิ่งสุ่มทั้งหมดนี้ฉันคิดว่าดีที่สุดที่จะใช้สิ่งนี้และทำเช่นนี้:

this.options[this.selectedIndex].text



1

คุณจะต้องได้รับ innerHTML ของตัวเลือกไม่ใช่ค่าของมัน

ใช้this.innerHTMLแทนthis.selectedIndex.

แก้ไข: คุณจะต้องได้รับองค์ประกอบตัวเลือกก่อนจากนั้นจึงใช้ innerHTML

ใช้this.textแทนthis.selectedIndex.


นี่เป็นสิ่งที่ไม่ถูกต้อง มันจะสร้างกราฟinnerHTMLของ<select>องค์ประกอบ
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

แต่:

 <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! และทำไมต้องส่งข้อมูลทั้งหมดนั้นไปยังฟังก์ชัน เพียงแค่ผ่าน (สิ่งนี้) และให้ฟังก์ชันตัดสินใจว่าจะใช้อะไร
mplungjan

เอ๊ะฉันคิดว่ามันอาจจะดีกว่า / เร็วกว่านี้ แต่ฉันอยากได้ยินคำโต้แย้งของ @ mplungjan
Nick Pickering

1
innerHTML เป็นวิธีอำนวยความสะดวกที่คิดค้นโดย Microsoft จากนั้นก็คัดลอกไปยังเบราว์เซอร์อื่น ๆ แต่เนื่องจาก a) ไม่เป็นมาตรฐานและ b) คุณไม่สามารถมี html ในตัวเลือกได้จึงไม่จำเป็นต้องสับสนกับปัญหาเมื่อตัวเลือกมี. value และ. text
mplungjan

innerHTMLสะดวกมากแม้ว่า ... ฉันเต็มใจที่จะเสียสละมาตรฐานและความเรียบง่ายทั้งหมดเพื่อสิ่งนั้น : P
Nick Pickering

1
โดยส่วนตัวแล้วฉันใช้. text () กับ jQuery และ .innerHTML กับ JS ที่บริสุทธิ์และช่วยให้ฉันหลีกเลี่ยงข้อผิดพลาดเมื่อผสมเฟรมเวิร์กโดยใช้ความเคยชินเท่านั้น ฉันรู้ว่า innerHTML ทำงานได้ในทุกเบราว์เซอร์และนั่นทำให้ฉันมีความสุข :) โอ้และฉันระบุพารามิเตอร์ฟังก์ชันทั้งสองเพื่อให้ OP สามารถเชื่อมโยงกับโซลูชันของฉันได้ง่ายขึ้นไม่มีเหตุผลอื่น
ericosg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.