Mengambil teks dari <option> yang dipilih di elemen <select>

156

Berikut ini:

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

Bagaimana saya bisa mendapatkan teks dari opsi yang dipilih (yaitu "Test One" atau "Test Two") menggunakan JavaScript

document.getElementsById('test').selectedValue mengembalikan 1 atau 2, properti apa yang mengembalikan teks dari opsi yang dipilih?

CountZero
sumber

Jawaban:

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');
Sean Bright
sumber
javascript brilian seperti biasa!
doniyor
3
Jawaban ini sudah usang, lihat jawaban @ davidjb di bawah ini untuk HTML5 one-liner yang bagus.
Christallkeks
1
@ Christallkeks - one-liner melempar pengecualian jika tidak ada yang dipilih . lebih sedikit garis tidak selalu lebih baik.
Sean Bright
88

Jika Anda menggunakan jQuery maka Anda dapat menulis kode berikut:

$("#selectId option:selected").html();
arturgrigor
sumber
30
karena dia ingin teks, mungkin lebih baik untuk digunakan.text()
Muhd
5
Jangan bingung $("#selectId option[selected]"), yang akan memilih opsi yang memiliki atribut "terpilih" tetapi saat ini mungkin tidak dipilih.
mowwwalker
sepertinya lebih rumit.!
NDEthos
54
document.getElementById('test').options[document.getElementById('test').selectedIndex].text;
cacing
sumber
Ini juga berhasil bagi saya, setelah mencoba semua opsi lain.
mimi
wordk ini sempurna!
Albert Hidalgo
29

Di bawah HTML5 Anda dapat melakukan ini:

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

Dokumentasi MDN di https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement/selectedOptions menunjukkan dukungan lintas-browser penuh (paling tidak Desember 2017), termasuk Chrome, Firefox, Edge dan browser ponsel , tetapi tidak termasuk Internet Explorer.

davidjb
sumber
+1, sementara ini adalah jalannya. Tiket Firefox sudah diperbaiki dan saya bahkan repot-repot membuka MS Edge untuk memverifikasi bahwa mereka mendukungnya juga.
Christallkeks
28
selectElement.options[selectElement.selectedIndex].text;

Referensi:


sumber
Mudah dimengerti daripada jawaban yang diberikan oleh @wormhit. +1 untuk penyederhanaan
Jacques Mathieu
7

The optionsproperti berisi semua <options>- dari sana Anda dapat melihat.text

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

Anda dapat menggunakan selectedIndexuntuk mengambil yang dipilih saat ini option:

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

this.options [this.selectedIndex] .innerText

Phani CR
sumber
2

Jika Anda menemukan utas ini dan ingin tahu cara mendapatkan teks opsi yang dipilih melalui acara di sini adalah kode contoh:

alert(event.target.options[event.target.selectedIndex].text);
nol dan satu
sumber
1

Gunakan objek daftar pilih, untuk mengidentifikasi indeks opsi yang dipilih sendiri. Dari sana - ambil HTML bagian dalam indeks itu. Dan sekarang Anda memiliki string teks dari opsi itu.

<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>
Creeperstanson
sumber
Tambahkan beberapa penjelasan
HaveNoDisplayName
.innerHTMLmendapat semua anak dan atribut mereka. Sementara itu berfungsi ketika suatu elemen tidak memiliki anak, jika Anda memiliki elemen dengan anak-anak, ia mengembalikan lebih dari yang dimaksudkan.
hipkiss
1
Berapa banyak "anak-anak" yang Anda harapkan memiliki di antara tag <option> Anak-anak Anda? </option>?
Creeperstanson
0

Mirip dengan @artur tanpa jQuery, dengan javascript biasa:

// Menggunakan variabel "elt" @ Sean-bright

var selection=elt.options[elt.selectedIndex].innerHTML;
viditkothari
sumber
0

Cara mudah dan sederhana:

const select = document.getElementById('selectID');
const selectedOption = [...select.options].find(option => option.selected).text;
Paweł Bednarczyk
sumber
1
Meskipun potongan kode ini dapat menyelesaikan masalah, itu tidak menjelaskan mengapa atau bagaimana ia menjawab pertanyaan. Harap sertakan penjelasan untuk kode Anda , karena itu sangat membantu untuk meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, dan orang-orang itu mungkin tidak tahu alasan untuk saran kode Anda.
Luca Kiebel
Saya tidak melihat bagaimana ini mudah atau sederhana. Mengapa Anda menggunakan find()ketika Anda sudah tahu indeks item yang dipilih? Juga, jika tidak ada item yang dipilih ( <select multiple>), ini akan menghasilkan kesalahan.
Sean Bright