75 votes

Comment sélectionner une valeur dans une liste déroulante de sélection avec JavaScript ?

J'ai une liste déroulante comme celle-ci

<select style="width: 280px" id="Mobility" name="Mobility">
  <option selected="">Please Select</option>
  <option>K</option>
  <option>1</option>
  <option>2</option>
  <option>3</option>
  <option>4</option>
  <option>5</option>
  <option>6</option>
  <option>7</option>
  <option>8</option>
  <option>9</option>
  <option>10</option>
  <option>11</option>
  <option>12</option>
</select>

J'utilise cette ligne pour sélectionner une valeur ; cela fonctionne dans Mozilla mais pas dans IE ? Pourquoi cela ne fonctionne-t-il pas ?

var element = document.getElementById("Mobility");
element.value = "10";

0 votes

1 votes

Consultez cet article : javascriptstutorial.com/blog/

0 votes

Comment faire s'il n'y a pas d'ID d'élément ? J'ai le nom de l'élément.

119voto

James Hill Points 27532

Utilisez le selectedIndex propriété :

document.getElementById("Mobility").selectedIndex = 12; //Option 10

Méthode alternative :

Bouclez sur chaque valeur :

//Get select object
var objSelect = document.getElementById("Mobility");

//Set selected
setSelectedValue(objSelect, "10");

function setSelectedValue(selectObj, valueToSet) {
    for (var i = 0; i < selectObj.options.length; i++) {
        if (selectObj.options[i].text== valueToSet) {
            selectObj.options[i].selected = true;
            return;
        }
    }
}

0 votes

Est-il possible de ne pas utiliser selectedIndex ?

1 votes

Comment faire si j'ai le nom de l'élément au lieu de l'ID ?

32voto

Amin Points 391

Le moyen le plus simple est d'utiliser cette

document.getElementById("mySelect").value = "banana";

myselect est le nom de votre liste déroulante banane est juste un des éléments de votre liste déroulante

15voto

GregM Points 2068
function setSelectedIndex(s, v) {
    for ( var i = 0; i < s.options.length; i++ ) {
        if ( s.options[i].value == v ) {
            s.options[i].selected = true;
            return;
        }
    }
}

Où s est la liste déroulante et v est la valeur

0 votes

@GregM, sur la base du HTML dans l'OP, cela ne fonctionnera pas. s.options[i].value devrait être s.options[i].text .

0 votes

@GregM, Le PO ne spécifie pas de valeur pour les options, seulement du texte.

0 votes

Ok ouais tu as raison :(, je laisserai ma réponse là au cas où il mettrait de la valeur ;)

12voto

Gabor Points 121

La solution la plus simple possible si vous connaissez la valeur

document.querySelector('option[value=" + value +"]').selected = true

0 votes

Fonctionne parfaitement.

6voto

Doug R. Points 2022

Je me rends compte qu'il s'agit d'une vieille question, mais je vais poster la solution pour mon cas d'utilisation, au cas où d'autres personnes se trouveraient dans la même situation que moi lors de l'implémentation Réponse de James Hill (ci-dessus) .

J'ai trouvé cette question en essayant de résoudre le même problème. La réponse de James m'a permis d'atteindre 90%. Cependant, dans mon cas d'utilisation, la sélection de l'élément dans la liste déroulante déclenche également une action sur la page à partir de la liste déroulante. onchange événement. Le code de James tel qu'il est écrit ne déclenche pas cet événement (du moins dans Firefox, avec lequel je faisais mes tests). En conséquence, j'ai apporté la modification mineure suivante :

function setSelectedValue(object, value) {
    for (var i = 0; i < object.options.length; i++) {
        if (object.options[i].text === value) {
            object.options[i].selected = true;
            object.onchange();
            return;
        }
    }

    // Throw exception if option `value` not found.
    var tag = object.nodeName;
    var str = "Option '" + value + "' not found";

    if (object.id != '') {
        str = str + " in //" + object.nodeName.toLowerCase()
              + "[@id='" + object.id + "']."
    }

    else if (object.name != '') {
        str = str + " in //" + object.nodeName.toLowerCase()
              + "[@name='" + object.name + "']."
    }

    else {
        str += "."
    }

    throw str;
}

Notez le object.onchange() que j'ai ajouté à la solution originale . Il appelle le gestionnaire pour s'assurer que l'action sur la page se produit.

Editar

Ajout d'un code permettant de lever une exception si l'option value n'est pas trouvé ; ceci est nécessaire pour mon cas d'utilisation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X