การดึงข้อความของ <option> ที่เลือกในองค์ประกอบ <select>


156

ในต่อไปนี้:

<select id="test">
    <option value="1">Test One</option>
    <option value="2">Test Two</option>
</select>

ฉันจะได้รับข้อความของตัวเลือกที่เลือก (เช่น "ทดสอบหนึ่ง" หรือ "ทดสอบสอง") โดยใช้ JavaScript

document.getElementsById('test').selectedValue ส่งคืน 1 หรือ 2 คุณสมบัติใดที่ส่งคืนข้อความของตัวเลือกที่เลือก?

คำตอบ:


258
function getSelectedText(elementId) {
    var elt = document.getElementById(elementId);

    if (elt.selectedIndex == -1)
        return null;

    return elt.options[elt.selectedIndex].text;
}

var text = getSelectedText('test');

จาวาสคริปต์ที่ยอดเยี่ยมเช่นเคย!
doniyor

3
คำตอบนี้ล้าสมัยแล้วโปรดดูคำตอบของ @ davidjb ด้านล่างสำหรับ HTML5 one-liner ที่ดี
Christallkeks

1
@Christallkeks - ที่หนึ่งซับพ่นยกเว้นถ้าไม่มีอะไรจะถูกเลือก เส้นที่น้อยลงนั้นไม่ได้ดีกว่าเสมอไป
Sean Bright

88

หากคุณใช้ jQuery คุณสามารถเขียนรหัสต่อไปนี้:

$("#selectId option:selected").html();

30
เนื่องจากเขาต้องการข้อความน่าจะดีกว่าที่จะใช้.text()
Muhd

5
เพื่อไม่ให้สับสน$("#selectId option[selected]")ซึ่งจะเลือกตัวเลือกที่มีคุณสมบัติ "เลือก" แต่อาจไม่ได้เลือกในปัจจุบัน
mowwwalker

ดูเหมือนจะซับซ้อนกว่า!
ประสบการณ์ใกล้ตายใน

54
document.getElementById('test').options[document.getElementById('test').selectedIndex].text;

มันใช้งานได้สำหรับฉันด้วยหลังจากลองตัวเลือกอื่น ๆ ทั้งหมด
มี่

คำนี้สมบูรณ์แบบ!
Albert Hidalgo

29

ภายใต้ HTML5 คุณสามารถทำสิ่งนี้ได้:

document.getElementById('test').selectedOptions[0].text

เอกสารของ MDN ที่https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement/selectedOptionsระบุว่ารองรับเบราว์เซอร์เต็มรูปแบบ (อย่างน้อยธันวาคม 2017) รวมถึง Chrome, Firefox, Edge และเบราว์เซอร์มือถือ แต่ไม่รวม Internet Explorer


+1 ขณะนี้เป็นวิธีที่จะไป ตั๋ว Firefox ได้รับการแก้ไขและฉันยังใส่ใจที่จะเปิด MS Edge เพื่อตรวจสอบว่ารองรับเช่นกัน
Christallkeks

28
selectElement.options[selectElement.selectedIndex].text;

อ้างอิง:


เข้าใจง่ายกว่าคำตอบของ @wormhit +1 สำหรับการทำให้ง่ายขึ้น
Jacques Mathieu

7

optionsคุณสมบัติที่มีทุก<options>- จากนั้นคุณสามารถดู.text

document.getElementById('test').options[0].text == 'Text One'

6

คุณสามารถใช้selectedIndexเพื่อดึงข้อมูลปัจจุบันที่เลือกoption:

el = document.getElementById('elemId')
selectedText = el.options[el.selectedIndex].text


2

หากคุณพบกระทู้นี้และต้องการทราบวิธีรับข้อความตัวเลือกที่เลือกผ่านเหตุการณ์ที่นี่คือตัวอย่างรหัส:

alert(event.target.options[event.target.selectedIndex].text);

1

ใช้วัตถุรายการที่เลือกเพื่อระบุดัชนีตัวเลือกที่เลือก จากตรงนั้น - คว้า HTML ภายในของดัชนีนั้น และตอนนี้คุณมีสตริงข้อความของตัวเลือกนั้น

<select onchange="alert(this.options[this.selectedIndex].innerHTML);">
       <option value="">Select Actions</option>
       <option value="1">Print PDF</option>
       <option value="2">Send Message</option>
       <option value="3">Request Review</option>
       <option value="4">Other Possible Actions</option>
    </select>

เพิ่มคำอธิบายบางอย่าง
HaveNoDisplayName

.innerHTMLรับเด็กทุกคนและคุณลักษณะของพวกเขา ในขณะที่มันทำงานเมื่อองค์ประกอบไม่มีลูกถ้าคุณมีองค์ประกอบที่มีลูกก็จะคืนค่ามากกว่าที่ตั้งใจ
hipkiss

1
คุณคาดหวังว่าจะมี "เด็ก" กี่คนในระหว่าง <option> เด็ก ๆ ของคุณ </option> แท็ก
Creeperstanson

0

คล้ายกับ @artur เพียงปราศจาก jQuery โดยมี javascript ธรรมดา:

// การใช้ตัวแปร "elt" ของ @ Sean-bright

var selection=elt.options[elt.selectedIndex].innerHTML;

0

ง่ายวิธีง่ายๆ:

const select = document.getElementById('selectID');
const selectedOption = [...select.options].find(option => option.selected).text;

1
แม้ว่าข้อมูลโค้ดนี้อาจช่วยแก้ปัญหาได้ แต่ก็ไม่ได้อธิบายว่าทำไมหรือตอบคำถามอย่างไร โปรดระบุคำอธิบายสำหรับรหัสของคุณเนื่องจากช่วยปรับปรุงคุณภาพการโพสต์ของคุณได้อย่างแท้จริง จำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตและคนเหล่านั้นอาจไม่ทราบสาเหตุของการแนะนำรหัสของคุณ
Luca Kiebel

ฉันไม่เห็นว่ามันง่ายหรือง่ายแค่ไหน ทำไมคุณจะใช้find()เมื่อคุณรู้ดัชนีของรายการที่เลือก? นอกจากนี้หากไม่มีรายการที่เลือก ( <select multiple>) สิ่งนี้จะสร้างข้อผิดพลาด
Sean Bright
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.