select2 display not updating label text but value is changing
Asked Answered
A

2

7

I am using select2 v4.0.3 along with JQuery. I initialize my selectors as:

$("#datatype").select2({
        theme: "classic"
        }); 

 $("#unit").select2({
        theme: "classic"
        }); 

Then I want to detect a change on #datatype and change the value of #unit which I do as follows:

$("#datatype").on('select2:select',function () {
    $("#unit").val('21'); //udpate unit type to be 'none'
    });

The problem is that the value of #unit is getting set to 21 but the displayed label for that selector is not updating. Any suggestions ?

It seems as if select2 is not aware of the event or that it has not been setup properly to listen to changes. I am not sure what the solution is. I am new to web technologies.

Adiell answered 23/7, 2016 at 3:17 Comment(0)
A
10

After digging through the Select2 documentation, any .val() updates need to be followed by $('#unit').trigger('change');

So in my case, the code should look like

$("#datatype").on('select2:select',function () {
    $('#unit').val('21'); // Select the option with a value of '21'
    $('#unit').trigger('change'); // Notify any JS components that the value changed
});

Note that this is only true for select2 version 4 and greater.

I would also recommend people upgrade to version 4 since you can make direct calls to change values without having to specify initSelect()

Adiell answered 25/7, 2016 at 0:7 Comment(0)
E
8

Using select2 v4.0 you can also trigger the change.select2 event to update the displayed label. This prevents other components that are listening to the change event from causing side effects.

$("#datatype").on('select2:select',function () {
    $('#unit').val('21'); // Select the option with a value of '21'
    $('#unit').trigger('change.select2'); // Notify only Select2 of changes
});
Ecthyma answered 7/8, 2019 at 17:17 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.