web-dev-qa-db-fra.com

le plugin jQuery Chosen ajoute des options de manière dynamique

Je fais un jQuery menu déroulant choisi comme ceci:

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

Je ne trouve pas comment ajouter des options, par exemple:

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

Tout d'abord, vous devez ajouter le <option>s au <select> auquel Chosen était lié. Par exemple:

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

Ensuite, vous devez déclencher l'événement chosen:updated:

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

Plus d'informations peuvent être trouvées ici (bien que vous deviez faire défiler jusqu'à Change / Update Events).


Mise à jour du 7 août 2013

Le nom de l'événement a été remplacé par chosen:updated depuis la version 1.0 (juillet 2013), comme Tony l'a mentionné dans les commentaires. La documentation mise à jour peut être trouvée ici .

121
Bojangles

la dernière version choisie a changé le nom de l'événement en "choisi: mis à jour"

donc votre code sera comme ça:

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

Vous pouvez appeler cette fonction pour ajouter un élément à l'élément choisi après l'avoir sauvegardé sur le serveur à l'aide d'Ajax:

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

Appel Ajax:

$.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
    });
3
TotPeRo

Essaye ça..

         $.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>");
                            }
                        }
                    });
                  }
                });
1
muthu

J'ai utilisé le code ci-dessous pour mettre à jour dynamiquement les options de menu déroulant choisies et cela fonctionne: 

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

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

Pour votre information, j'utilise jQuery Chosen Version 0.13.0  

Bon codage!

0
Deepak Goswami