Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use "tags" with Select2

I have this "Select2" dropdownmenu which get populated from ajax and php. The script I have here is allowing one choice to be made, and passed into a html element. I'd like to use this code with "tags". I've tried but can't figure out how to fetch all selected values? How do I send what is selected?

HTML

//form
<input type='hidden' class='col-md-4' id='choose_usr_email' name='choose_usr_email' required>
//Snap up whats chosed
<input type='text' id='chosen_usr_email' name='chosen_usr_email'>

Javascript

$(document).ready(function(){
var chosenUsr = $('#choose_usr_email');
$("#choose_usr_email").select2({
    tags: true,
    placeholder: "Välj användare..",
    ajax: {
    url: "time.php",
    dataType: 'json',
        //search term
        data: function (term, page) {
            return {
            q: term, // search term
            page: page
            };
        },
        results: function (data, page) {
        return { results: data};
        }
    } // Ajax Call
}); // Select2

// Start Change
$(chosenUsr).change(function() {
    var usrId = $(chosenUsr).select2('data').id;
    var usrEmail = $(chosenUsr).select2('data').text;
    var timeNr = $(chosenUsr).select2('data').timenr;
    var usrfName = $(chosenUsr).select2('data').usrfname;
 
    $('#chosen_usr_id').val(usrId);
    $('#chosen_usr_email').val(usrEmail);
    $('#chosen_usr_time_nr').val(timeNr);
    $('#chosen_usr_fname').val(usrfName);
  
  }); //Change
}); //Document Ready
like image 385
d00rman Avatar asked Feb 26 '15 14:02

d00rman


People also ask

How do I create a Select2 dynamically?

<select class="form-control"> <option selected="selected">orange</option> <option>white</option> <option>purple</option> </select> $(".js-example-tags").select2({ tags: true });

How do I add options to Select2?

New options can be added to a Select2 control programmatically by creating a new Javascript Option object and appending it to the control: var data = { id: 1, text: 'Barn owl' }; var newOption = new Option(data.text, data.id, false, false); $('#mySelect2').append(newOption).trigger('change');

How add option tag dynamically to select in jQuery?

Method 1: Append the option tag to the select box The select box is selected with the jQuery selector and this option is added with the append() method. The append() method inserts the specified content as the last child of the jQuery collection. Hence the option is added to the select element.

How do I set Select2 values?

To dynamically set the "selected" value of a Select2 component: $('#inputID'). select2('data', {id: 100, a_key: 'Lorem Ipsum'}); Where the second parameter is an object with expected values.


1 Answers

With select2 v.4.0 you can use multiple dropdown.

Set name as choose_usr_email[], so that it will create array of tags on submit.

HTML

<form action="" id="tagForm">
    <select multiple="true" name="choose_usr_email[]" id="choose_usr_email" class="form-control select2">
        <!-- if tags are loaded over AJAX, no need for <option> elments -->
    </select>
    <!-- more form elements ... -->
    <button type="submit">Submit</button>
</form>

Script

$('#choose_usr_email').select2({
    tags: true,
    // automatically creates tag when user hit space or comma:
    tokenSeparators: [",", " "],
    ajax: {
        url: "time.php",
        dataType: 'json',
        //search term
        data: function (term, page) {
            return {
                q: term, // search term
                page: page
            };
        },
        results: function (data, page) {
            return { results: data};
        }
    }
});

// handle form submission:
$('#tagForm').submit(function(e){
    e.preventDefault();
    $.ajax({
        // PHP file where you send selected values:
        url      : "file.php",
        // if you want to use $_POST in PHP, uncomment the line below:
        // type  : 'POST',
        dataType : 'json',
        // serialize the form:
        data     : $('#tagForm').serialize(),
        success  : function(response){
            // handle server response ...
        }
    });
});

PHP (file where you send selected values)

<?php

    // If 'type' is not specified in AJAX, use $_GET
    // check if 'choose_usr_email' exists in AJAX request
    if(isset($_GET['choose_usr_email']){
        // if exists, loop through the values:
        foreach($_GET['choose_usr_email'] as $key => $value){
            // do something with each $value (each submitted tag)
        }
    }

?>

DEMO


For Select2 < v.4.0

$('#choose_usr_email').val(); returns each selected tag id (if specified) or text, separated by coma (1,2,3,...).

$('#tagForm').submit(function(e){
    e.preventDefault();
    $.ajax({
        // PHP file where you send selected values:
        url      : "file.php",
        // if you want to use $_POST in PHP, uncomment the line below:
        // type  : 'POST',
        dataType : 'json',
        // request data, split input field value by comma:
        data     : {
            choose_usr_email : $('#choose_usr_email').val().split(',')
        },
        success  : function(response){
            // handle server response ...
        }
    });
});

Then you can process the AJAX request the same way as in previous PHP example.

like image 183
Artur Filipiak Avatar answered Oct 13 '22 00:10

Artur Filipiak