Uzyskaj wybraną wartość z listy rozwijanej za pomocą JavaScript


1784

Jak uzyskać wybraną wartość z listy rozwijanej za pomocą JavaScript?

Wypróbowałem poniższe metody, ale wszystkie zwracają wybrany indeks zamiast wartości:

var as = document.form1.ddlViewBy.value;
var e = document.getElementById("ddlViewBy");
var strUser = e.options[e.selectedIndex].value;

Odpowiedzi:


2927

Jeśli masz element select, który wygląda następująco:

<select id="ddlViewBy">
  <option value="1">test1</option>
  <option value="2" selected="selected">test2</option>
  <option value="3">test3</option>
</select>

Uruchamianie tego kodu:

var e = document.getElementById("ddlViewBy");
var strUser = e.options[e.selectedIndex].value;

Stałaby strUsersię 2. Jeśli tak naprawdę chcesz test2, zrób to:

var e = document.getElementById("ddlViewBy");
var strUser = e.options[e.selectedIndex].text;

Co by strUserbyłotest2


13
@ R11G, użyj onchange:)
AlexJaa

142
var strUser = e.options[e.selectedIndex].value;dlaczego nie tylkovar strUser = e.value ?
The Red Pea

18
@ TheRedPea - być może dlatego, że kiedy ta odpowiedź została napisana, istniała szansa (jakkolwiek zdalna), że potrzebna była stara wersja Netscape Navigator, dlatego zastosowano równie starożytną metodę dostępu do wartości pojedynczego wyboru. Ale zgaduję tylko o tym. ;-)
RobG

12
Użyłem tak:var e = document.getElementById("ddlViewBy").value;
Fathur Rohim,

3
powinno być e.target.options[e.target.selectedIndex].text, nie wiem, dlaczego jest źle we wszystkich odpowiedziach tutaj.
OZZIE,

372

Zwykły JavaScript:

var e = document.getElementById("elementId");
var value = e.options[e.selectedIndex].value;
var text = e.options[e.selectedIndex].text;

jQuery:

$("#elementId :selected").text(); // The text content of the selected option
$("#elementId :selected").val(); // The value of the selected option

AngularJS : ( http://jsfiddle.net/qk5wwyct ):

// HTML
<select ng-model="selectItem" ng-options="item as item.text for item in items">
</select>
<p>Text: {{selectItem.text}}</p>
<p>Value: {{selectItem.value}}</p>

// JavaScript
$scope.items = [{
  value: 'item_1_id',
  text: 'Item 1'
}, {
  value: 'item_2_id',
  text: 'Item 2'
}];

1
Muszę robić coś złego, ponieważ kiedy próbuję tego, odzyskuję tekst każdej opcji z menu rozwijanego.
Kevin

6
To działało dla mnie w inny sposób. $ ("# ddlViewBy: zaznaczono"). val () nie bez zaznaczone
Ruwantha

1
element.options[e.selectedIndex].valuemusi byćelement.options[element.selectedIndex].value
Christopher

Nadal przydatne - dziękuję za napisanie odmian / języka! Teraz gdybym tylko znał odpowiednik rozwijanego interfejsu Office JS API ...
Cindy Meister

powinno być e.target.options[e.target.selectedIndex].text, nie wiem, dlaczego jest źle we wszystkich odpowiedziach tutaj.
OZZIE,

174
var strUser = e.options[e.selectedIndex].value;

Jest to poprawne i powinno dać ci wartość. Czy to ten tekst, którego szukasz?

var strUser = e.options[e.selectedIndex].text;

Więc masz jasną terminologię:

<select>
    <option value="hello">Hello World</option>
</select>

Ta opcja ma:

  • Indeks = 0
  • Wartość = cześć
  • Text = Hello World

1
myślałem, że „.value” w javascript powinno zwrócić mi wartość, ale tylko „.text” zwróci jako to, co zwraca .SelectedValue w asp.net. Dzięki na przykład podane!
Fire Hand,

1
Tak - ustaw wartość opcji tak, jak jest. Prostsze - facet powyżej musi napisać więcej kodu, aby nadrobić swoją początkową niejasność.
Andrew Koper,

powinno być e.target.options[e.target.selectedIndex].text, nie wiem, dlaczego jest źle we wszystkich odpowiedziach tutaj.
OZZIE,

62

Poniższy kod przedstawia różne przykłady związane z uzyskiwaniem / wprowadzaniem wartości z pól wejściowych / zaznaczających za pomocą JavaScript.

Link źródłowy

Działająca wersja JavaScript i jQuery

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

 <select id="Ultra" onchange="run()">  <!--Call run() function-->
     <option value="0">Select</option>
     <option value="8">text1</option>
     <option value="5">text2</option>
     <option value="4">text3</option>
</select><br><br>
TextBox1<br>
<input type="text" id="srt" placeholder="get value on option select"><br>
TextBox2<br>
<input type="text" id="rtt"  placeholder="Write Something !" onkeyup="up()">

Poniższy skrypt pobiera wartość wybranej opcji i umieszcza ją w polu tekstowym 1

<script>
    function run() {
        document.getElementById("srt").value = document.getElementById("Ultra").value;
    }
</script>

Poniższy skrypt pobiera wartość z pola tekstowego 2 i ostrzega o jej wartości

<script>
    function up() {
        //if (document.getElementById("srt").value != "") {
            var dop = document.getElementById("srt").value;
        //}
        alert(dop);
    }
</script>

Poniższy skrypt wywołuje funkcję z funkcji

<script>
    function up() {
        var dop = document.getElementById("srt").value;
        pop(dop); // Calling function pop
    }

    function pop(val) {
        alert(val);
    }?
</script>

onchange=run(this.value)lub (this.text)może być bardziej korzystne.
Berci


22

Jeśli kiedykolwiek natkniesz się na kod napisany wyłącznie dla programu Internet Explorer, możesz zobaczyć:

var e = document.getElementById("ddlViewBy");
var strUser = e.options(e.selectedIndex).value;

Uruchomienie powyższego w przeglądarce Firefox i in. Spowoduje wyświetlenie błędu „nie jest funkcją”, ponieważ program Internet Explorer pozwala na uniknięcie używania () zamiast []:

var e = document.getElementById("ddlViewBy");
var strUser = e.options[e.selectedIndex].value;

Prawidłowym sposobem jest użycie nawiasów kwadratowych.


19
<select id="Ultra" onchange="alert(this.value)"> 
 <option value="0">Select</option>
 <option value="8">text1</option>
 <option value="5">text2</option>
 <option value="4">text3</option>
</select>

Każde pole wejściowe / formularza może używać słowa kluczowego „this”, gdy uzyskujesz do niego dostęp z wnętrza elementu. Eliminuje to potrzebę lokalizowania formularza w drzewie dom, a następnie lokalizowania tego elementu wewnątrz formularza.


Wytłumaczenie byłoby w porządku.
Peter Mortensen

14

Początkujący prawdopodobnie będą chcieli uzyskiwać dostęp do wartości z zaznaczenia za pomocą atrybutu NAZWA, a nie atrybutu ID. Wiemy, że wszystkie elementy formularza wymagają nazw, nawet zanim otrzymają identyfikatory.

Dodam więc getElementByName()rozwiązanie tylko dla nowych programistów.

NB nazwy elementów formularza będą musiały być unikalne, aby formularz był użyteczny po opublikowaniu, ale DOM może pozwolić na współdzielenie nazwy przez więcej niż jeden element. Z tego powodu rozważ dodanie ID do formularzy, jeśli możesz, lub wyraźne nazwy elementów formularza my_nth_select_named_xi my_nth_text_input_named_y.

Przykład użycia getElementByName:

var e = document.getElementByName("my_select_with_name_ddlViewBy");
var strUser = e.options[e.selectedIndex].value;

Nie działa, jeśli my_select_with_name_ddlViewBy jest tablicą podobną do my_select_with_name_ddlViewBy []
zeuf

14

Są dwa sposoby, aby to zrobić albo za pomocą JavaScript lub jQuery.

JavaScript:

var getValue = document.getElementById('ddlViewBy').selectedOptions[0].value;

alert (getValue); // This will output the value selected.

LUB

var ddlViewBy = document.getElementById('ddlViewBy');

var value = ddlViewBy.options[ddlViewBy.selectedIndex].value;

var text = ddlViewBy.options[ddlViewBy.selectedIndex].text;

alert (value); // This will output the value selected

alert (text); // This will output the text of the value selected

jQuery:

$("#ddlViewBy:selected").text(); // Text of the selected value

$("#ddlViewBy").val(); // Outputs the value of the ID in 'ddlViewBy'

12

Po prostu użyj

  • $('#SelectBoxId option:selected').text(); za uzyskanie tekstu zgodnie z listą

  • $('#SelectBoxId').val(); w celu uzyskania wybranej wartości indeksu


5
Używa jQuery, który nie odpowiada na pytanie OP.
David Meza

9

Poprzednie odpowiedzi wciąż pozostawiają pole do poprawy ze względu na możliwości, intuicyjność kodu i użycie idversus name. Można odczytać trzy dane wybranej opcji - numer indeksu, wartość i tekst. Ten prosty kod dla różnych przeglądarek wykonuje wszystkie trzy czynności:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Demo GetSelectOptionData</title>
</head>
<body>
    <form name="demoForm">
        <select name="demoSelect" onchange="showData()">
            <option value="zilch">Select:</option>
            <option value="A">Option 1</option>
            <option value="B">Option 2</option>
            <option value="C">Option 3</option>
        </select>
    </form>

    <p id="firstP">&nbsp;</p>
    <p id="secondP">&nbsp;</p>
    <p id="thirdP">&nbsp;</p>

    <script>
    function showData() {
        var theSelect = demoForm.demoSelect;
        var firstP = document.getElementById('firstP');
        var secondP = document.getElementById('secondP');
        var thirdP = document.getElementById('thirdP');
        firstP.innerHTML = ('This option\'s index number is: ' + theSelect.selectedIndex + ' (Javascript index numbers start at 0)');
        secondP.innerHTML = ('Its value is: ' + theSelect[theSelect.selectedIndex].value);
        thirdP.innerHTML = ('Its text is: ' + theSelect[theSelect.selectedIndex].text);
    }
     </script>
</body>
</html>

Demo na żywo: http://jsbin.com/jiwena/1/edit?html,output .

idpowinien być stosowany do makijażu. Do celów funkcjonalnych namejest nadal aktualny, również w HTML5 i nadal powinien być używany. Wreszcie, pamiętaj o użyciu nawiasów kwadratowych w porównaniu do okrągłych w niektórych miejscach. Jak wyjaśniono wcześniej, tylko (starsze wersje) Internet Explorera będą akceptować okrągłe wersje we wszystkich miejscach.



7

Innym rozwiązaniem jest:

document.getElementById('elementId').selectedOptions[0].value

6

Przykładowy sposób działania:

var e = document.getElementById("ddlViewBy");
var val1 = e.options[e.selectedIndex].value;
var txt = e.options[e.selectedIndex].text;

document.write("<br />Selected option Value: "+ val1);
document.write("<br />Selected option Text: "+ txt);
<select id="ddlViewBy">
  <option value="1">test1</option>
  <option value="2">test2</option>
  <option value="3"  selected="selected">test3</option>
</select>

Uwaga: Wartości nie zmieniają się wraz ze zmianą menu rozwijanego, jeśli potrzebujesz tej funkcji, należy wprowadzić zmianę onClick.


Dobra odpowiedź na pokazanie, jak należy odświeżyć kod po użyciu!
Użytkownik, który nie jest użytkownikiem,

5

Możesz użyć querySelector.

Na przykład

var myElement = document.getElementById('ddlViewBy');

var myValue = myElement.querySelector('[selected]').value;

5

Mam nieco inny pogląd na to, jak to osiągnąć. Zwykle robię to w następujący sposób (jest to łatwiejszy sposób i działa z każdą przeglądarką, o ile wiem):

<select onChange="functionToCall(this.value);" id="ddlViewBy">
  <option value="value1">Text one</option>
  <option value="value2">Text two</option>
  <option value="value3">Text three</option>
  <option value="valueN">Text N</option>
</select>


4

Aby postępować zgodnie z poprzednimi odpowiedziami, robię to jako jeden wiersz. Służy do uzyskania rzeczywistego tekstu wybranej opcji. Istnieją dobre przykłady uzyskania numeru indeksu. (A dla tekstu chciałem tylko pokazać w ten sposób)

let selText = document.getElementById('elementId').options[document.getElementById('elementId').selectedIndex].text

W niektórych rzadkich przypadkach może być konieczne użycie nawiasów, ale byłoby to bardzo rzadkie.

let selText = (document.getElementById('elementId')).options[(document.getElementById('elementId')).selectedIndex].text;

Wątpię, aby proces ten przebiegał szybciej niż wersja dwuliniowa. Po prostu lubię konsolidować mój kod tak bardzo, jak to możliwe.

Niestety nadal pobiera to element dwukrotnie, co nie jest idealne. Metoda, która chwyta element tylko raz, byłaby bardziej przydatna, ale jeszcze tego nie zorientowałem, jeśli chodzi o robienie tego z jednym wierszem kodu.


3

Oto linia kodu JavaScript:

var x = document.form1.list.value;

Zakładając, że rozwijane menu o nazwie lista name="list"i zawarte w formularzu z atrybutem nazwy name="form1".


OP powiedział, że to nie działało dla nich: „Próbowałem poniższych metod, ale wszystkie zwracają wybrany indeks zamiast wartości: var as = document.form1.ddlViewBy.value;...”
Użytkownik, który nie jest użytkownikiem

2

Powinieneś używać tego querySelectordo osiągnięcia. To również ustandaryzuje sposób uzyskiwania wartości z elementów formularza.

var dropDownValue = document.querySelector('#ddlViewBy').value;

Fiddle: https://jsfiddle.net/3t80pubr/


1

Nie wiem, czy to ja nie dostaję właściwego pytania, ale to po prostu zadziałało: użycie zdarzenia onchange () w twoim pliku HTML, np.

<select id="numberToSelect" onchange="selectNum">
    <option value="1">One</option>
    <option value="2">Two</option>
    <option value="3">Three</option>
</select>

// javascript

function sele(){
    var strUser = numberToSelect.value;
}

To da ci dowolną wartość z wybranego menu rozwijanego na kliknięcie


1

Najprostszym sposobem na to jest:

var value = document.getElementById("selectId").value;

Nie chce wartości, ale pokazanego tekstu zaznaczonego pola
Thanasis,

0

Oto prosty sposób na zrobienie tego w funkcji onchange:

event.target.options[event.target.selectedIndex].dataset.name


1
Mówiąc o prostocie, myślałem o tym zamiast event.target
Christian Læirbag

0

Po prostu zrób: document.getElementById('idselect').options.selectedIndex

Wtedy dostanę wybierz wartość indeksu, zaczynając od 0.


To nie działa
Hujjat Nazari

-1

Próbować

ddlViewBy.value                      // value

ddlViewBy.selectedOptions[0].text    // label


-1

Stwórz menu rozwijane z kilkoma opcjami (Tyle, ile chcesz!)

<select>
  <option value="giveItAName">Give it a name
  <option value="bananaShark">Ridiculous animal
  <ooption value="Unknown">Give more options!
</select>

Zrobiłem trochę zabawne. Oto fragment kodu:

<select>
  <option value="RidiculousObject">Banana Shark
  <option value="SuperDuperCoding">select tag and option tag!
  <option value="Unknown">Add more tags to add more options!
</select>
<h1>Only 1 option (Useless)</h1>
<select>
  <option value="Single">Single Option
</select>  

tak, fragment kodu zadziałał

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.