Jak uzyskać zaznaczony tekst w polu wyboru Javascript


79

To działa doskonale

<select name="selectbox" onchange="alert(this.value)">

Ale chcę zaznaczyć tekst. Próbowałem w ten sposób

<select name="selectbox" onchange="alert(this.text)">

Pokazuje niezdefiniowane. Odkryłem, jak używać DOM, aby uzyskać tekst. Ale chcę to zrobić w ten sposób, mam na myśli używanie właśnie this.value.

Odpowiedzi:


126
this.options[this.selectedIndex].innerHTML

powinien dostarczyć "wyświetlany" tekst wybranej pozycji. this.valuejak powiedziałeś, po prostu podaje wartość valueatrybutu.


6
Nie podoba mi się to. Chociaż jestem pewien, że działa w obecnych przeglądarkach, jest to dziwna mieszanka kodu opartego na elementach DOM i kodu manipulującego w starym stylu. optionszwraca listę Optionobiektów, co do których nie jestem pewien, są nigdzie podane jako takie same jak <option>elementy. Lepiej jest wykorzystać uświęconą wiekiem textwłaściwość wybranego Option, która na pewno zadziała.
Tim Down

Tim, Optionprzedmioty są tym samym, co HTMLOptionElementprzedmioty. Jeśli sprzeciwiasz się używaniu options, możesz alternatywnie użyć childrenlub childNodeszamiast tego (nie pamiętam dokładnie, który z nich; myślę, że oba działają)
Delan Azabani

1
Myślę, że trochę źle zrozumiałeś: jestem całkowicie za używaniem options, ale Optionobiekty są starsze niż HTMLOptionElementobiekty i nie widziałem specyfikacji, która to nakazuje Optioni HTMLOptionElementmusi być tym samym, nawet jeśli mogą być w większości przeglądarek, które obsługują oba. Chodzi mi o to, że bezpieczniej byłoby nie mieszać tych dwóch stylów. Więc wolałbym this.options[this.selectedIndex].textcoś opartego na węzłach selectedIndex, co jest skomplikowane z powodu konieczności odfiltrowania węzłów tekstowych spacji w IE.
Tim Down

To bardzo dobra uwaga. Tak z ciekawości, jeśli masz węzły nietekstowe wewnątrz węzłów opcji, czy textzwraca wartość innerHTML, czy tylko wszystkie węzły tekstowe łącznie?
Delan Azabani,

1
Rany ludzie, powstrzymajcie niekompetencję w głosowaniu! Oded ma poprawną odpowiedź. Jak trudno jest zbadać koncepcję DOM? > __>
Jan

68

Aby uzyskać wartość wybranej pozycji, możesz wykonać następujące czynności:

this.options[this.selectedIndex].text

Tutaj optionsuzyskuje się dostęp do różnych z SelectedIndexzaznaczonych, a służy do wyboru wybranego, a następnie jegotext jest uzyskiwany dostęp do niego.

Przeczytaj więcej o wybranym modelu DOM tutaj .


1
this.options[this.selectedIndex].valuejest dokładnie taki sam, jak this.valueprzepraszam.
Delan Azabani,

Kiedy używam this.options [this.SelectedIndex] .text w konsoli błędu wyświetla komunikat - Błąd: this.options [this.SelectedIndex] jest niezdefiniowane
Aajahid

3
SHAKTI: To dlatego, że selectedIndexraczej niż SelectedIndex.
Tim Down

2
Lub dla zabawy this.selectedOptions[0].text(z oczywistymi rozszerzeniami, jeśli masz wybór wielokrotny).
ruffin


33

Po prostu użyj

$('#SelectBoxId option:selected').text(); Aby uzyskać tekst wymieniony na liście

$('#SelectBoxId').val(); Aby wybrać wartość indeksu


2
Chociaż działa to doskonale w przypadku jQuery, OP jako oryginalny tag wymienił tylko javascript. Mimo to +1, ponieważ tak wiele osób używa jQuery.
Sablefoste

1

Wiem, że nikt nie pyta tutaj o rozwiązanie jQuery, ale warto wspomnieć, że z jQuery możesz po prostu poprosić o:$('#selectorid').val()


0

Jeśli chcesz uzyskać wartość, możesz użyć tego kodu dla elementu select z id = "selectBox"

let myValue = document.querySelector("#selectBox").value;

Jeśli chcesz uzyskać tekst, możesz użyć tego kodu

var sel = document.getElementById("selectBox");
var text= sel.options[sel.selectedIndex].text;
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.