jQuery get selected option value (not the text, but the attribute 'value')
Asked Answered
O

15

188

Okay, I have this code:

<select name="selector" id="selector">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>

And I'd like to get the value of the option selected. Example: 'Option 2' is selected, and the value of it is '2'. The '2' is the value I need to get and not 'Option 2'.

Oneil answered 26/10, 2012 at 15:31 Comment(0)
C
317

04/2020: Corrected old answer

Use :selected pseudo selector on the selected options and then use the .val function to get the value of the option.

$('select[name=selector] option').filter(':selected').val()

Side note: Using filter is better then using :selected selector directly in the first query.

If inside a change handler, you could use simply this.value to get the selected option value. See demo for more options.

//ways to retrieve selected option and text outside handler
console.log('Selected option value ' + $('select option').filter(':selected').val()); 
console.log('Selected option value ' + $('select option').filter(':selected').text());

$('select').on('change', function () {
  //ways to retrieve selected option and text outside handler
  console.log('Changed option value ' + this.value);
  console.log('Changed option text ' + $(this).find('option').filter(':selected').text());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<select>
  <option value="1" selected>1 - Text</option>
  <option value="2">2 - Text</option>
  <option value="3">3 - Text</option>
  <option value="4">4 - Text</option>
</select>

Old answer:

Edit: As many pointed out, this does not returns the selected option value.

~~Use .val to get the value of the selected option. See below,

$('select[name=selector]').val()~~
Calvinism answered 26/10, 2012 at 15:32 Comment(6)
Do ur test: $('select[name=selector]').change(function() { alert($(this).val()); });Malcah
Note that if the selected option has no value attribute specified, the label (i.e. <option>label</option>) will be returned. Might not always be what you want. Of course, in most applications, value is specified.Swiss
Why is using filter better? Also why does .val() not work? It seems to work at least in Chrome. It's not clear from the comments. Thanks for your help!Birddog
for me .val() seems to work fine, any reason not to use it?Bybee
This doesn't work, but if you use .find instead of .filter you might have success :wink:Nervous
Why is this? -> Side note: Using filter is better then using :selected selector directly in the first query.Infest
I
138

I just wanted to share my experience

For me,

$('#selectorId').val()

returned null.

I had to use

$('#selectorId option:selected').val()

Infest answered 16/7, 2014 at 10:27 Comment(4)
Was that browser specific case? Did the newest version of chrome not allow it, or was it IE that didnt support it?Parturifacient
It was in the newest version of Chrome. Maybe also in Firefox, but not sure.Infest
Not sure why $('#selectorId option:selected').val() didn't worked for me. Instead I used $('select option:selected').val()Conquest
@Francisco The problem is that $('select option:selected').val() will take the value of the first selector in the HTML code. Whereas with $('#selectorId option:selected').val() you can have the value of the selector which id you specified. Double check for typos. Here is an example that shows what I just said: codepen.io/anon/pen/NqgqyzInfest
C
25
$('select').change(function() {
    console.log($(this).val())
});​

jsFiddle example

.val() will get the value.

Candleberry answered 26/10, 2012 at 15:33 Comment(0)
D
10

You need to add an id to your select. Then:
$('#selectorID').val()

Droopy answered 26/10, 2012 at 15:32 Comment(2)
i have the id added, just forgot to add it here.Oneil
From what I've read using an ID as a selector is the fastest method.Droopy
T
8

Try this:

$(document).ready(function(){
    var data= $('select').find('option:selected').val();
});

or

var data= $('select').find('option:selected').text();
Telium answered 28/6, 2017 at 10:50 Comment(0)
W
6

you can use jquery as follows

SCRIPT

  $('#IDOfyourdropdown').change(function(){
    alert($(this).val());
  });

FIDDLE is here

Waiter answered 26/10, 2012 at 15:39 Comment(0)
F
3

For a select like this

<select class="btn btn-info pull-right" id="list-name" style="width: auto;">
   <option id="0">CHOOSE AN OPTION</option>
   <option id="127">John Doe</option>
   <option id="129" selected>Jane Doe</option>

... you can get the id this way:

$('#list-name option:selected').attr('id');

Or you can use value instead, and get it the easy way...

<select class="btn btn-info pull-right" id="list-name" style="width: auto;">
   <option value="0">CHOOSE AN OPTION</option>
   <option value="127">John Doe</option>
   <option value="129" selected>Jane Doe</option>

like this:

$('#list-name').val();
Fluent answered 22/6, 2016 at 22:37 Comment(0)
A
2

One of my options didn't have a value: <option>-----</option>. I was trying to use if (!$(this).val()) { .. } but I was getting strange results. Turns out if you don't have a value attribute on your <option> element, it returns the text inside of it instead of an empty string. If you don't want val() to return anything for your option, make sure to add value="".

Alialia answered 3/9, 2016 at 21:14 Comment(0)
T
2
 $(document ).ready(function() {
    $('select[name=selectorname]').change(function() { 
     alert($(this).val());});
 });
Tiki answered 2/5, 2018 at 10:28 Comment(2)
While this code could solve the problem, it is best to add elaboration and explain how it works for people who might not understand this piece of code.Natatorium
@paper1111 this is simple functions. I can explain if this is needed. $('select[name = here is select box name]) .change() - function its mean that when we change select box option function will be work. $(this).val() - it return selected option valueMulct
H
2

$('#myOptions').change(function() {
  var value = $("#myOptions option:selected").val();
  alert(value);
});
<select name="selector" id="myOptions">
  <option value="1">Option 1</option>
  <option value="2">Option 2</option>
</select>
Harold answered 19/7, 2022 at 11:14 Comment(1)
Your answer could be improved by adding more information on what the code does and how it helps the OP.Valuator
B
1

this code work very well for me: this return the value of selected option. $('#select_id').find('option:selected').val();

Braddy answered 24/11, 2017 at 15:39 Comment(0)
H
1

Source Link

Use jQuery val() to GET Selected Value and and text() to GET Option Text.

    <select id="myDropDown" class="form-control">
        <option value="0">Select Value 0</option>
        <option value="8">Option value 8</option>
        <option value="5">Option value 5</option>
        <option value="4">Option value 4</option>
    </select>

Change Event on Select Dropdown

        $("#myDropDown").change(function () {

            // Fetching Value
            console.log($(this).val());

            // Fetching Text
            console.log($(this).find('option:selected').text());

            alert('Value: '+$(this).val()+' | Text: '+$(this).find('option:selected').text());
        });

Button Click

        $("button").click(function () {

        // Fetching Value
            console.log($("#myDropDown").val());

    // Fetching Text
            console.log($('#myDropDown option:selected').text());

            alert('Value: '+$("#myDropDown").val()+' | Text: '+$('#myDropDown option:selected').text());
        });
Horatia answered 7/2, 2020 at 5:13 Comment(0)
L
1

It's working better. Try it.

let value = $("select#yourId option").filter(":selected").val();

Lombroso answered 23/11, 2020 at 8:44 Comment(0)
S
0

Look at the example:

    <select class="element select small" id="account_name" name="account_name"> 

        <option value="" selected="selected">Please Select</option>           
        <option value="paypal" >Paypal</option>
        <option value="webmoney" >Webmoney</option>

    </select>

 <script type="text/javascript">

        $(document).ready(function(){ 
             $('#account_name').change(function(){
               alert($(this).val());                                                          
             });
        });
 </script>
Sellma answered 22/1, 2014 at 23:6 Comment(0)
H
0
$('#selectorID').val();

OR

$('select[name=selector]').val();

OR

$('.class_nam').val();
Housley answered 22/8, 2017 at 19:57 Comment(1)
@FarhadBagherlo "Keep typing" is not a useful edit comment! Please summarize your changes, so that readers of the edit history understand what you've done without inspecting every changed character. Thanks!Hyperbaric

© 2022 - 2024 — McMap. All rights reserved.