jQuery Chosen plugin add options dynamically

JqueryJquery Chosen

Jquery Problem Overview


I make a jQuery Chosen drop-down like this:

$('.blah').chosen();

I can't find how I can add options, something like:

$('.blah').chosen('add', name, value);

Jquery Solutions


Solution 1 - Jquery

First, you need to add the <option>s to the <select> that Chosen was bound to. For example:

$('.blah').append('<option value="foo">Bar</option>');

Then, you need to trigger the chosen:updated event:

$('.blah').trigger("chosen:updated");

More information can be found here (although you need to scroll down to Change / Update Events).


Update 7th August 2013

The event name has changed to chosen:updated since version 1.0 (July 2013) as Tony mentions in the comments. The updated documentation can be found here.

Solution 2 - Jquery

newest chosen version changed the event name to "chosen:updated"

so your code will be like this:

$('.blah').append("<option value='"+key+"'>"+value+"</option>");
$('.blah').val(key); // if you want it to be automatically selected
$('.blah').trigger("chosen:updated");

Solution 3 - Jquery

You can call this function to add element to chosen after you save the element to server using Ajax:

function appendToChosen(id,value){
	$('.blah')
		.append($('<option></option>')
		.val(id)
		.attr('selected', 'selected')
		.html(value)).trigger('liszt:updated');
}

Ajax call:

$.ajax({
	type: 'POST',
	url: 'savepage.php',
	data: $('#modal-form form').serialize(),

	success: function(data, status) {
		appendToChosen(data[0],data[1]);
	},
	error: function (response) {
		alert(response);
	}
	}).always(function(data, status) {
		//hide loading
	});

Solution 4 - Jquery

Try this..

         $.ajax({
            url: "@Url.Action("Actionname", "Controller")",
            data: { id: id },
                dataType: "json",
                type: "POST",
                success: function (data) {
                $("#id_chzn .chzn-results").children().remove();
                var opts = $('#id')[0].options;
                    $.map(data, function (item) {
                        var text = item.text;
                        for (var i = 0; i < opts.length ; i++) {
                            var option = opts[i];
                            var comparetext = option.innerText;
                            var val = 0;
                            if(text == comparetext)
                            {
                                val = option.index;
                                $('#id_chzn .chzn-results').append("<li id='id_chzn" + val + "' class='active-result' style>" + item.text + "</li>");
                            }
                        }
                    });
                  }
                });

Solution 5 - Jquery

I used below code to update choosen dropdown options dynamically and it works:

var myDropDownOptionHtml ='<option value="0">--Customer--</option>'; 

$('#myDropdownId').html(myDropDownOptionHtml );
setTimeout(function() {
    $("#myDropdownId").trigger("liszt:updated");
},100);

FYI, I am using jQuery Chosen Version 0.13.0

Happy Coding!

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSBelView Question on Stackoverflow
Solution 1 - JqueryBojanglesView Answer on Stackoverflow
Solution 2 - JqueryaluksidadiView Answer on Stackoverflow
Solution 3 - JqueryTotPeRoView Answer on Stackoverflow
Solution 4 - JquerymuthuView Answer on Stackoverflow
Solution 5 - JqueryDeepak GoswamiView Answer on Stackoverflow