110

Hello friends this is my code:

<select id='first'>
  <option value='1'> First  </option>
  <option value='2'> Second </option>
  <option value='3'> Three  </option>
</select>

This is my select2 code:

$("#first").select2();

Below is code for getting selected value.

$("#first").select2('val'); // It returns first,second,three.

This is return a text like first,second,three and I want to get 1,2,3.
Means I need the value of select box, not text.

Renish Khunt
  • 5,620
  • 18
  • 55
  • 92

12 Answers12

180
$("#first").val(); // this will give you value of selected element. i.e. 1,2,3.
somesh
  • 3,508
  • 4
  • 16
  • 10
  • 5
    $("#first").val(); //it return 1,2,3 OR $("#first").select2('val'); // it return first,second,three – Renish Khunt Nov 11 '13 at 14:23
  • $("#first").val(); will return 1,2,3 (which ever is selected) and can you post the code in function select2() for more details. – somesh Nov 11 '13 at 14:40
  • for an select called by id name instead of class name, use: $(".first").val() – Rui Martins Jun 21 '17 at 09:15
  • @RuiMartins wrong. ID's are called with "#" and classes are called with ".", so to call by ID, you'd use $("#first").val() and for CLASS you'd use $(".first").val() – Source Matters May 13 '20 at 13:48
67

To get Select element you can use $('#first').val();

To get the text of selected value - $('#first :selected').text();

Can you please post your select2() function code

Krish R
  • 22,583
  • 7
  • 50
  • 59
42

$("#first").select2('data') will return all data as map

wawa
  • 616
  • 5
  • 14
16

If you are using ajax, you may want to get updated value of select right after the selection.

//Part 1

$(".element").select2(/*Your code*/)    

//Part 2 - continued 

$(".element").on("select2:select", function (e) { 
  var select_val = $(e.currentTarget).val();
  console.log(select_val)
});

Credits: Steven-Johnston

ufukomer
  • 1,021
  • 1
  • 14
  • 16
Johny Pie
  • 843
  • 3
  • 14
  • 37
9

This solution allows you to forget select element. Helpful when you do not have an id on select elements.

$("#first").select2()
.on("select2:select", function (e) {
    var selected_element = $(e.currentTarget);
    var select_val = selected_element.val();
});
Steven Johnston
  • 1,729
  • 13
  • 16
8

Simple answer is :

$('#first').select2().val()

and you can write by this way also:

 $('#first').val()
Rajiv Sharma
  • 6,746
  • 1
  • 52
  • 54
4

Try this :

$('#input_id :selected').val(); //for getting value from selected option
$('#input_id :selected').text(); //for getting text from selected option
  • @RenishKhunt the answers here are not only for you (person asking the question), but also for other people seeing this page. And the more different solutions are submitted here, the better choice has everyone else, again: not just you :) – infografnet Dec 19 '18 at 19:33
  • 1
    Yeah, I am sorry. Thanks, @infografnet and Thank you so much Fahmi Imanudin for posting an answer :) – Renish Khunt Dec 24 '18 at 16:20
4

Above solutions did not work for me with latest select2 (4.0.13)

With jQuery you can use this solution to retrieve value according to documentation: https://select2.org/programmatic-control/retrieving-selections

$('#first').find(':selected').val();
Michal Vrchota
  • 326
  • 2
  • 6
3
$(".element").select2(/*Your code*/)
.on('change', function (e) {
     var getID = $(this).select2('data');
     alert(getID[0]['id']); // That's the selected ID :)
});
GSIxz
  • 53
  • 7
  • While your answer may solve the question, [including an explanation](https://meta.stackexchange.com/q/114762) of how and why this solves the problem would really help to improve the quality of your post, and probably result in more up-votes. Remember that you are answering the question for readers in the future, not just the person asking now. You can edit your answer to add explanations and give an indication of what limitations and assumptions apply. - [From Review](https://stackoverflow.com/review/late-answers/28310557) – Adam Marshall Feb 12 '21 at 18:37
2

See this fiddle.
Basically, you want to get the values of your option-tags, but you always try to get the value of your select-node with $("#first").val().

So we have to select the option-tags and we will utilize jQuerys selectors:

$("#first option").each(function() {
    console.log($(this).val());
});

$("#first option") selects every option which is a child of the element with the id first.

KeyNone
  • 8,745
  • 4
  • 34
  • 51
  • $("#first").val(); //it return 1,2,3 OR $("#first").select2('val'); // it return first,second,three – Renish Khunt Nov 11 '13 at 14:23
  • Seems like i got your question wrong, then please clarify exactly what you want to achieve. – KeyNone Nov 11 '13 at 14:28
  • when i used select2 plugin then i get value using $("#first").val(). it's not return anything it return blank. – Renish Khunt Nov 11 '13 at 14:31
  • See [this fiddle](http://jsfiddle.net/j3Jaf/1/). Works perfectly well for me. (I added select2.js under the external resources, though i cannot tell why the boxes look ugly). – KeyNone Nov 11 '13 at 14:36
  • the key was that you said that we want to get value of option tags! – Dariux Aug 10 '15 at 07:31
0

Other answers wasn't working for me so i developed solution:

I created option with class="option-item" for easy targeting

HTML :

<select id="select-test">
<option value="5-val" id="first-id" class="option-item"> First option </option>
</select>

Then for every selected option i added display none property

CSS:

option:checked {
   display: none;
}

Now we can add change to our SelectBox to find our selected option with display none property by simple :hidden attribute

JQuery:

$('#select-test').change(function(){
//value 
    $('#select-test').find('.option-item:hidden').val();
//id
    $('#select-test').find('.option-item:hidden').attr('id');
//text
    $('#select-test').find('.option-item:hidden').text();
});

Working fiddle: https://jsfiddle.net/Friiz/2dk4003j/10/

Bartosz Was
  • 116
  • 1
  • 9
0

Solution :

var my_veriable = $('#your_select2_id').select2().val();
var my_last_veriable = my_veriable.toString();
www
  • 38,575
  • 12
  • 48
  • 84