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
<select class="form-control"> <option selected="selected">orange</option> <option>white</option> <option>purple</option> </select> $(".js-example-tags").select2({ tags: true });
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');
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.
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.
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
$('#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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With