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

Jak uzyskać wybraną wartość z listy rozwijanej przy użyciu 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;
Author: 10 Rep, 2009-07-06

28 answers

Jeśli masz element select, który wygląda tak:

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

Uruchomienie tego kodu:

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

Uczyniłoby strUser 2. Jeśli to, czego naprawdę chcesz, to test2, zrób to:

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

Co uczyniłoby strUser test2

 3154
Author: Paolo Bergantino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-19 15:20:34

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'
}];
 403
Author: Vitalii Fedorenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-30 03:08:28
var strUser = e.options[e.selectedIndex].value;

To jest poprawne i powinno dać ci wartość. Chodzi Ci o SMS?

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

Więc masz jasność co do terminologii:

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

Ta opcja ma:

  • Index = 0
  • Value = hello
  • Text = Hello World
 179
Author: Greg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-06 07:29:56

Poniższy kod pokazuje różne przykłady związane z pobieraniem / umieszczaniem wartości z pól input/select przy użyciu JavaScript.

Link Źródłowy

Praca Javascript & Jquery Demo

Tutaj wpisz opis obrazka

Tutaj wpisz opis obrazka

 <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 oraz alarmowanie z jego 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>
 64
Author: Code Spy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-18 06:10:18
var selectedValue = document.getElementById("ddlViewBy").value;
 45
Author: Mohammad Faisal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-25 13:46:09

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

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

Uruchomienie powyższego w Firefoksie i in. spowoduje błąd "nie jest funkcją", ponieważ Internet Explorer pozwala uniknąć użycia () zamiast []:

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

Poprawnym sposobem jest użycie nawiasów kwadratowych.

 23
Author: Carl Onager,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-10 14:07:29
<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 input/form może używać słowa kluczowego "this", gdy uzyskujesz do niego dostęp z wnętrza elementu. Eliminuje to konieczność lokalizowania formularza w drzewie dom, a następnie umieszczania tego elementu wewnątrz formularza.

 19
Author: boateng,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-10 14:50:03

Istnieją dwa sposoby, aby to zrobić 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'
 16
Author: Dulith De Costa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-10 14:19:14

Początkujący mogą chcieć uzyskać dostęp do wartości z select z atrybutem NAME, a nie ID. Wiemy, że wszystkie elementy formularza potrzebują nazw, nawet zanim otrzymają identyfikatory.

Więc dodaję rozwiązanie getElementsByName() tylko dla nowych programistów, aby zobaczyć też.

NB. nazwy elementów formularza muszą być unikalne, aby formularz mógł być użyteczny po opublikowaniu, ale DOM może zezwolić na współdzielenie nazwy przez więcej niż jeden element. Z tego powodu rozważ dodanie identyfikatorów do formularzy, jeśli możesz, lub bądź jawny z nazwami elementów formularza my_nth_select_named_x i my_nth_text_input_named_y.

Przykład użycia getElementsByName:

var e = document.getElementsByName("my_select_with_name_ddlViewBy")[0];
var strUser = e.options[e.selectedIndex].value;
 14
Author: Ben Greenaway,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-24 23:31:48

Po prostu użyj

  • $('#SelectBoxId option:selected').text(); aby uzyskać tekst jak na liście

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

 12
Author: Marvil Joy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-06 14:24:58

Poprzednie odpowiedzi wciąż pozostawiają miejsce na poprawę ze względu na możliwości, intuicyjność kodu i użycie id versus name. Można odczytać trzy dane wybranej opcji-jej numer indeksu, jej wartość i tekst. Ten prosty, między przeglądarkowy kod robi wszystkie trzy:

<!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>

Live demo: http://jsbin.com/jiwena/1/edit?html, output .

id powinny być używane do celów makijażu. Dla celów funkcjonalnych, name jest nadal ważne, również w HTML5 i nadal powinny być używane. Na koniec należy pamiętać o stosowaniu nawiasów kwadratowych i okrągłych w niektórych miejscach. Jak wyjaśniono wcześniej, tylko (starsze wersje) Internet Explorer będzie akceptować okrągłe we wszystkich miejscach.

 9
Author: Frank Conijn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-10 14:11:46

Using jQuery:

$('select').val();
 8
Author: Félix Gagnon-Grenier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-10 12:39:04

Innym rozwiązaniem jest:

document.getElementById('elementId').selectedOptions[0].value
 7
Author: Javad Kargar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-10 14:17:01

Przykład 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ą listy rozwijanej, jeśli potrzebujesz tej funkcjonalności, należy zaimplementować zmianę onClick.

 6
Author: Ani Menon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-02 13:19:01

Możesz użyć querySelector.

Np.

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

var myValue = myElement.querySelector('[selected]').value;
 5
Author: Rounin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-04 22:36:47

Mam nieco inny pogląd na to, jak to osiągnąć. Zazwyczaj robię to z następującym podejściem (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>
 5
Author: ThomAce,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-10 14:20:14

Aby przejść do poprzednich odpowiedzi, tak to robię jako jednolinijkowy. Ma to na celu uzyskanie rzeczywistego tekstu wybranej opcji. Istnieją dobre przykłady na uzyskanie 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ę, by proces ten przebiegał szybciej niż wersja Dwuliniowa. Po prostu lubię konsolidować swój kod tak bardzo, jak możliwe.

Niestety to wciąż pobiera element dwa razy, co nie jest idealne. Metoda, która chwyta element tylko raz, byłaby bardziej przydatna, ale jeszcze tego nie rozgryzłem, jeśli chodzi o robienie tego za pomocą jednej linii kodu.

 5
Author: Genko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-09 18:19:35

Najprostszym sposobem na to jest:

var value = document.getElementById("selectId").value;
 5
Author: Clairton Luz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-01 12:34:04

W 2015 roku, w Firefox, działa również następujące działanie.

E.Opcje .selectedIndex

 4
Author: Hector Llorens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-01 01:09:56

Oto linia kodu JavaScript:

var x = document.form1.list.value;

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

 3
Author: Belgacem Ksiksi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-21 11:06:31

Powinieneś używać querySelector, aby to osiągnąć. To również standaryzuje sposób uzyskiwania wartości z elementów formularza.

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

Https://jsfiddle.net/3t80pubr/

 2
Author: Pal Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-16 23:39:11

W bardziej nowoczesnych przeglądarkach, querySelector pozwala nam pobrać wybraną opcję w jednym poleceniu, używając :checked pseudo-Klasa . Z wybranej opcji możemy zebrać wszystkie potrzebne nam informacje:

const opt = document.querySelector('#ddlViewBy option:checked');
// opt is now the selected option, so
console.log(opt.value, 'is the selected value');
console.log(opt.text, "is the selected option's text");
<select id="ddlViewBy">
  <option value="1">test1</option>
  <option value="2" selected="selected">test2</option>
  <option value="3">test3</option>
</select>
 2
Author: Heretic Monkey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-08 20:50:35

Oto prosty sposób, aby to zrobić w funkcji onchange:

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

 1
Author: zackify,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-16 20:52:40

Nie wiem, czy to ja nie rozumiem pytania, ale to po prostu zadziałało na mnie: Używanie zdarzenia onchange () w 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 rozwijanego menu wybierz za kliknięcie

 1
Author: Olawale Oladiran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-29 13:23:06

Myślę, że możesz dołączyć detektor zdarzeń do samego znacznika select np:

<script>
  document.addEventListener("DOMContentLoaded", (_) => {
    document.querySelector("select").addEventListener("change", (e) => {
      console.log(e.target.value);
    });
  });
</script>

W tym scenariuszu, należy upewnić się, że masz atrybut value dla wszystkich opcji, i nie są one null.

 1
Author: Emmanuel Onah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-02 11:10:00

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

Następnie otrzymasz wartość indeksu select, zaczynając od 0.

 0
Author: Knautiluz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-22 15:03:05

Try

ddlViewBy.value                      // value

ddlViewBy.selectedOptions[0].text    // label

console.log( ddlViewBy.value );

console.log( ddlViewBy.selectedOptions[0].text );
<select id="ddlViewBy">
  <option value="1">Happy</option>
  <option value="2">Tree</option>
  <option value="3"  selected="selected">Friends</option>
</select>
 0
Author: Kamil Kiełczewski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-01 10:10:06

Stwórz rozwijane menu 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>
Trochę przezabawne. 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>  

Yay the snippet worked

 0
Author: Dangerousgame,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-20 08:49:05