jQuery Chosen plugin add options dynamically

后端 未结 5 1612
闹比i
闹比i 2020-12-03 00:38

I make a jQuery Chosen drop-down like this:

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

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

相关标签:
5条回答
  • 2020-12-03 00:59

    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
        });
    
    0 讨论(0)
  • 2020-12-03 01:00

    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.

    0 讨论(0)
  • 2020-12-03 01:01

    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");
    
    0 讨论(0)
  • 2020-12-03 01:12

    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!

    0 讨论(0)
  • 2020-12-03 01:17

    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>");
                                }
                            }
                        });
                      }
                    });
    
    0 讨论(0)
提交回复
热议问题