JQuery Select2 - How to select all options
I'm using jQuery select2 multi select dropdown. I need to select all options in a dropdown from code. Basically there is a Select All checkbox on which this functionality has to be implemented, I want to select/deselect options from this checkbox.
Solution 1:
using Select 2 DEMO
$("#e1").select2();
$("#checkbox").click(function(){
if($("#checkbox").is(':checked') ){
$("#e1 > option").prop("selected","selected");// Select All Options
$("#e1").trigger("change");// Trigger change to select 2
}else{
$("#e1 > option").removeAttr("selected");
$("#e1").trigger("change");// Trigger change to select 2
}
});
$("#button").click(function(){
alert($("#e1").val());
});
<select multiple id="e1" style="width:300px">
<option value="AL">Alabama</option>
<option value="Am">Amalapuram</option>
<option value="An">Anakapalli</option>
<option value="Ak">Akkayapalem</option>
<option value="WY">Wyoming</option>
</select>
<input type="checkbox" id="checkbox" >Select All
<input type="button" id="button" value="check Selected">
You need code As shown in DEMO2 for Simple Select
$("#checkbox").click(function(){
if($("#checkbox").is(':checked') ){
$("select > option").prop("selected","selected");
}else{
$("select > option").removeAttr("selected");
}
});
$("#button").click(function(){
alert($("select").val());
});
<select multiple size=2>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select> <input type="checkbox" id="checkbox" >Select All
<input type="button" id="button" value="check Selected">
Solution 2:
Answer from here works pretty good.
// Select all
$('#select-id').select2('destroy').find('option').prop('selected', 'selected').end().select2();
// Unselect all
$('#select-id').select2('destroy').find('option').prop('selected', false).end().select2();
Solution 3:
There is a description in thread on github. Quoting (https://github.com/ivaynberg/select2/issues/195#issuecomment-13489140 by MortadaAK) which allows you to select everything on ctrl+a
$(document).on("keypress",".select2-input",function(event){
if (event.ctrlKey || event.metaKey) {
var id =$(this).parents("div[class*='select2-container']").attr("id").replace("s2id_","");
var element =$("#"+id);
if (event.which == 97){
var selected = [];
element.find("option").each(function(i,e){
selected[selected.length]=$(e).attr("value");
});
element.select2("val", selected);
} else if (event.which == 100){
element.select2("val", "");
}
}
});
Solution 4:
you could do it for one string
$('select.your-select option').attr('selected', true).parent().trigger('change')
Solution 5:
$(document).ready(function() {
$("#checkbox").click(function(){
if($("#checkbox").is(':checked') ){ //select all
$("#e1").find('option').prop("selected",true);
$("#e1").trigger('change');
} else { //deselect all
$("#e1").find('option').prop("selected",false);
$("#e1").trigger('change');
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select multiple id="e1" style="width:300px">
<option value="AL">Alabama</option> //AJAX created
<option value="Am">Amalapuram</option> //AJAX created
<option value="An">Anakapalli</option> //AJAX created
<option value="Ak">Akkayapalem</option> //AJAX created
<option value="WY">Wyoming</option> //AJAX created
</select>
<input type="checkbox" id="checkbox" >Select All
If options are created after AJAX request then these options don't work. So we map them with find and select/unselect them , after that trigger change.
HTML
<select multiple id="e1" style="width:300px">
<option value="AL">Alabama</option> //AJAX created
<option value="Am">Amalapuram</option> //AJAX created
<option value="An">Anakapalli</option> //AJAX created
<option value="Ak">Akkayapalem</option> //AJAX created
<option value="WY">Wyoming</option> //AJAX created
</select>
<input type="checkbox" id="checkbox" >Select All
JS
$(document).ready(function() {
$("#checkbox").click(function(){
if($("#checkbox").is(':checked') ){ //select all
$("#e1").find('option').prop("selected",true);
$("#e1").trigger('change');
} else { //deselect all
$("#e1").find('option').prop("selected",false);
$("#e1").trigger('change');
}
});
});
just use find.