Comment ajouter des options à une liste déroulante en utilisant jQuery?

Comme le dit la question, comment ajouter une nouvelle option à une liste déroulante en utilisant jQuery?

Merci

287
demandé sur Earlz 2008-11-25 14:42:56

11 réponses

Sans utiliser de plugins supplémentaires,

var myOptions = {
    val1 : 'text1',
    val2 : 'text2'
};
var mySelect = $('#mySelect');
$.each(myOptions, function(val, text) {
    mySelect.append(
        $('<option></option>').val(val).html(text)
    );
});

Si vous aviez beaucoup d'options, ou si ce code devait être exécuté très fréquemment, alors vous devriez envisager d'utiliser un DocumentFragment au lieu de modifier le DOM plusieurs fois inutilement. Pour seulement une poignée d'options, je dirais que ça n'en vaut pas la peine.

------------------------------- Ajouté --------------------------------

DocumentFragment est une bonne option pour l'amélioration de la vitesse, mais nous ne pouvons pas créer d'élément d'option en utilisant document.createElement('option') puisque IE6 et IE7 ne le supportent pas.

Ce que nous pouvons faire est de créer un nouvel élément select, puis d'ajouter toutes les options. Une fois la boucle terminée, ajoutez-la à L'objet DOM réel.

var myOptions = {
    val1 : 'text1',
    val2 : 'text2'
};
var _select = $('<select>');
$.each(myOptions, function(val, text) {
    _select.append(
            $('<option></option>').val(val).html(text)
        );
});
$('#mySelect').append(_select.html());

De cette façon, nous allons modifier DOM pour une seule fois!

445
répondu nickf 2014-01-18 08:09:16

Sans plug-ins, cela peut être plus facile sans utiliser autant de jQuery, au lieu d'aller un peu plus old-school:

var myOptions = {
    val1 : 'text1',
    val2 : 'text2'
};
$.each(myOptions, function(val, text) {
    $('#mySelect').append( new Option(text,val) );
});

Si vous voulez spécifier si l'option a) est la valeur sélectionnée par défaut, et b) doit être sélectionnée maintenant, vous pouvez passer deux autres paramètres:

    var defaultSelected = false;
    var nowSelected     = true;
    $('#mySelect').append( new Option(text,val,defaultSelected,nowSelected) );
159
répondu Phrogz 2012-03-10 14:49:38

Avec le plugin: boîte de sélection jQuery . Vous pouvez le faire:

var myOptions = {
        "Value 1" : "Text 1",
        "Value 2" : "Text 2",
        "Value 3" : "Text 3"
    }
    $("#myselect2").addOption(myOptions, false); 
13
répondu cgreeno 2010-01-12 17:47:05

Vous pouvez d'abord effacer votre liste déroulante $('#DropDownQuality').vide();

Mon contrôleur dans MVC a renvoyé une liste de sélection avec un seul élément.

$('#DropDownQuality').append(
        $('<option></option>').val(data[0].Value).html(data[0].Text));    
9
répondu Har 2012-01-23 20:42:21

Ajouter un élément à la liste au début

$("#ddlList").prepend('<option selected="selected" value="0"> Select </option>');

Ajouter un élément à la liste à la fin

$('<option value="6">Java Script</option>').appendTo("#ddlList");

Opération de liste déroulante commune (Get, Set, Add, Remove) en utilisant jQuery

7
répondu Zakaria 2016-02-03 06:59:37

Notez que la solution de @Phrogz ne fonctionne pas dans IE 8 tandis que @nickf fonctionne dans tous les principaux navigateurs. Une autre approche est:

$.each(myOptions, function(val, text) {
    $("#mySelect").append($("&lt;option/&gt;").attr("value", val).text(text));
});
4
répondu Marshal 2011-08-22 01:15:10

U peut utiliser directement

$"(.ddlClassName").Html("<option selected=\"selected\" value=\"1\">1</option><option value=\"2\">2</option>")

- > Ici, vous pouvez utiliser une chaîne directe

3
répondu Jay 2010-09-20 09:14:41

Et aussi, utilisez .prepend () pour ajouter l'option au début de la liste des options. http://api.jquery.com/prepend/

3
répondu Johan 2012-03-29 05:51:08

En utilisant jquery, vous pouvez utiliser

      this.$('select#myid').append('<option>newvalue</option>');

Où "myid" est le id de la liste déroulante et newvalue est le texte que vous souhaitez insérer..

0
répondu chopss 2014-11-12 09:44:20

J'avais besoin d'ajouter autant d'options aux listes déroulantes qu'il y avait de listes déroulantes sur ma page. Donc je l'ai utilisé de cette façon:

function myAppender(obj, value, text){
    obj.append($('<option></option>').val(value).html(text));
}

$(document).ready(function() {
    var counter = 0;
    var builder = 0;
    // Get the number of dropdowns
    $('[id*="ddlPosition_"]').each(function() {
        counter++;
    });

    // Add the options for each dropdown
    $('[id*="ddlPosition_"]').each(function() {
        var myId = this.id.split('_')[1];

        // Add each option in a loop for the specific dropdown we are on
        for (var i=0; i<counter; i++) {
            myAppender($('[id*="ddlPosition_'+myId+'"]'), i, i+1);
        }
        $('[id*="ddlPosition_'+myId+'"]').val(builder);
        builder++;
    });
});

Cela configure dynamiquement les listes déroulantes avec des valeurs telles que 1 À n, et sélectionne automatiquement la valeur de l'ordre dans lequel la liste déroulante était (c'est-à-dire que la 2ème liste déroulante a "2" dans la boîte, etc.).

C'était ridicule que je ne puisse pas utiliser this ou this.Object ou {[3] } ou quelque chose comme ça dans mon 2ème .each(), bien que - - - j'ai dû obtenir l'ID spécifique de cet objet et ensuite prenez et passez cet objet entier à ma fonction avant qu'il ne soit ajouté. Heureusement, l'ID de ma liste déroulante a été séparé par un " _ " et je pouvais l'attraper. Je ne pense pas que j'aurais dû le faire, mais cela me donnait des exceptions jQuery autrement. Quelque chose que les autres aux prises avec ce que j'étais pourraient aimer savoir.

0
répondu vapcguy 2014-11-20 02:51:46

Essayez cette fonction:

function addtoselect(param,value){
    $('#mySelectBox').append('&lt;option value='+value+'&gt;'+param+'&lt;/option&gt;');
}
-1
répondu Sebastian Mach 2012-01-23 20:51:02