Comment faire la première option de <select> sélectionnée avec jQuery


548

Comment puis-je faire la première option de sélectionné avec jQuery?

<select id="target">
  <option value="1">...</option>
  <option value="2">...</option>
</select>

Réponses:


957
$("#target").val($("#target option:first").val());

364
Il convient de noter que cela est plus facile à faire avec $ ("# target") [0] .selectedIndex = 0;
David Andres

17
Cela fonctionne, mais il est basé sur la valeur du 1er élément , si le 1er élément contient une valeur vide, il sélectionnera l'élément le plus proche AVEC valeur
evilReiko

2
Semble fonctionner très bien, sauf pour IE6. Incertain de 7-8, fonctionne le 9.
Nicholi

3
Je me rétracte ma déclaration précédente, devançait moi-même. $ ("# cible"). val ("option: premier"); fonctionne le plus partout mais IE6 $ ("target"). val ($ ("# option cible: first"). val ()); fonctionnera dans IE6, car vous recherchez littéralement la première valeur et la saisissez comme valeur cible. Deux recherches d'identification au lieu d'une.
Nicholi

2
Et c'est en fait nécessaire pour IE6, 7 et 8. Alors que .val ('option: premier') fonctionne dans IE9 (et Safari et Firefox et Chrome et Opera).
Nicholi

178

Vous pouvez essayer ceci

$("#target").prop("selectedIndex", 0);

2
Cela ne fonctionne pas correctement dans tous les cas. J'ai un menu déroulant en cascade parent / enfant. Sélectionnez le parent n ° 1, affichez l'enfant n ° 1, sélectionnez le parent n ° 2 affichez l'enfant n ° 2. Chaque fois qu'ils sélectionnent un nouveau parent, il doit remettre l'enfant correspondant à la première option. Cette solution ne fait pas cela. Il laisse le menu enfant "collant". Voir l'option: selected.prop ('sélectionné', faux) / option: first.prop ('sélectionné', 'sélectionné') solution sur cette question pour la réponse qui fonctionne dans plus de scénarios.
Lance Cleveland

cela ne déclenche pas d'événement onChange. Au moins en chrome.
Tomasz Mularczyk

Je vous remercie! Ceci est la première réponse de la liste des réponses qui a fonctionné pour moi.
Casey Crookston

6
@Tomasz$("#target").prop("selectedIndex", 0).change();
mplungjan

@Romesh comment puis-je définir la base selectedIndex sur la valeur?
Junior Frogie

111
// remove "selected" from any options that might already be selected
$('#target option[selected="selected"]').each(
    function() {
        $(this).removeAttr('selected');
    }
);


// mark the first option as selected
$("#target option:first").attr('selected','selected');

1
Bonne deuxième approche. Veuillez ajouter la valeur de l'attribut sélectionné. Par exemple, attr ("sélectionné", "sélectionné"). Sans ce paramètre supplémentaire, la sélection n'est pas effectuée.
David Andres

@EgorPavlikhin - Je viens de modifier la réponse pour inclure le code JQuery pour supprimer le drapeau "sélectionné" de toutes les options qui auraient déjà été sélectionnées. Maintenant, la réponse est correcte :)
jmort253

20
Il n'y a pas besoin de la eachfonction, devrait être: $('#target option[selected="selected"]').removeAttr('selected')également maintenant devrait être utilisé avec removePropet à la propplace.
vsync

Une version plus approfondie de la réponse de James Lee Baker ailleurs sur cette question, ajoute cependant des cycles de calcul qui peuvent ne pas être nécessaires si l'interface est bien gérée.
Lance Cleveland

65

Lorsque vous utilisez

$("#target").val($("#target option:first").val());

cela ne fonctionnera pas dans Chrome et Safari si la première valeur d'option est nulle.

je préfère

$("#target option:first").attr('selected','selected');

car il peut fonctionner dans tous les navigateurs.


3
Vous devez également "désélectionner" tous les éléments sélectionnés précédemment pour que cela fonctionne dans plus de cas. Voir la réponse de James Lee Baker pour plus de détails.
Lance Cleveland

44

La modification de la valeur de l'entrée de sélection ou l'ajustement de l'attribut sélectionné peut remplacer la propriété selectedOptions par défaut de l'élément DOM, entraînant un élément qui peut ne pas se réinitialiser correctement sous une forme dont l'événement de réinitialisation a été appelé.

Utilisez la méthode prop de jQuery pour effacer et définir l'option requise:

$("#target option:selected").prop("selected", false);
$("#target option:first").prop("selected", "selected");

3
Parfait. J'ai des menus déroulants en cascade. Lorsqu'un utilisateur sélectionne l'option parent 2 puis l'option enfant 3, je ne veux pas que cela "colle". En d'autres termes, l'utilisateur sélectionne ensuite le parent n ° 1, puis re-sélectionne le parent n ° 2. Lorsque cela se produit, je veux que le menu enfant soit réinitialisé sur la première option (qui est "Any" dans mon cas). Toutes les autres solutions échouent ici sur Firefox v19 et Chrome sur Linux.
Lance Cleveland

33
$("#target")[0].selectedIndex = 0;

1
Cela ne fonctionnera pas dans les cas où une liste déroulante a un élément présélectionné. Voir mes commentaires sur la réponse sélectionnée pour plus de détails.
Lance Cleveland

21

Un point subtil que je pense avoir découvert au sujet des réponses les plus votées est que même si elles modifient correctement la valeur sélectionnée, elles ne mettent pas à jour l'élément que l'utilisateur voit (ce n'est qu'en cliquant sur le widget qu'il verra une coche à côté du élément mis à jour).

Le chaînage d'un appel .change () à la fin mettra également à jour le widget UI.

$("#target").val($("#target option:first").val()).change();

(Notez que j'ai remarqué cela en utilisant jQuery Mobile et une boîte sur le bureau Chrome, donc ce n'est peut-être pas le cas partout).


Le chaînage d'un appel .change () à la fin mettra également à jour le widget UI.
codemirror

17

Si vous avez désactivé les options, vous pouvez ajouter non ([désactivé]) pour éviter de les sélectionner, ce qui se traduit par ce qui suit:

$("#target option:not([disabled]):first").attr('selected','selected')

1
Bon point sur les options désactivées. Belle addition aux réponses présentées!
Lance Cleveland

16

Une autre façon de réinitialiser les valeurs (pour plusieurs éléments sélectionnés) pourrait être la suivante:

$("selector").each(function(){

    /*Perform any check and validation if needed for each item */

    /*Use "this" to handle the element in javascript or "$(this)" to handle the element with jquery */

    this.selectedIndex=0;

});

4
+1 c'est en fait une bonne réponse, mais vous auriez pu le rendre plus spécifique au domaine de la question; au lieu de $("selector")vous auriez pu juste écrire$('#target')
Ja͢ck


7
$('#newType option:first').prop('selected', true);

Cela ne fonctionne que s'il n'y a pas d'options déjà sélectionnées. Voir la réponse de James Lee Baker.
Webars

6

J'ai trouvé que le simple fait de définir attr sélectionné ne fonctionne pas s'il y a déjà un attribut sélectionné. Le code que j'utilise maintenant désactive d'abord l'attribut sélectionné, puis sélectionne la première option.

$('#target').removeAttr('selected').find('option:first').attr('selected', 'selected');

Cela fonctionne bien et est très similaire à la réponse de James Lee Baker notée ailleurs sur cette question. J'aime l'autre réponse avec option: selected et option: first comme exécution de option: first est susceptible d'être plus rapide (au niveau du calcul) que find ().
Lance Cleveland

5

Bien que chaque fonction ne soit probablement pas nécessaire ...

$('select').each(function(){
    $(this).find('option:first').prop('selected', 'selected');
});

travaille pour moi.


5

Voici comment je le ferais:

$("#target option")
    .removeAttr('selected')
    .find(':first')     // You can also use .find('[value=MyVal]')
        .attr('selected','selected');

1
Cela fonctionne bien et est très similaire à la réponse de James Lee Baker notée ailleurs sur cette question. J'aime l'autre réponse avec option: selected et option: first comme exécution de option: first est susceptible d'être plus rapide (au niveau du calcul) que find ().
Lance Cleveland

2

Cela ne fonctionnait que pour moi en utilisant un déclencheur («changement») à la fin, comme ceci:

$("#target option:first").attr('selected','selected').trigger('change');

2

Si vous allez utiliser la première option par défaut comme

<select>
    <option value="">Please select an option below</option>
    ...

alors vous pouvez simplement utiliser:

$('select').val('');

C'est sympa et simple.



1

Sur le dos de la réponse de James Lee Baker, je préfère cette solution car elle supprime la dépendance à la prise en charge du navigateur pour: d'abord: sélectionné ...

$('#target').children().prop('selected', false);
$($('#target').children()[0]).prop('selected', 'selected');

1

Pour moi, cela n'a fonctionné que lorsque j'ai ajouté le code suivant:

.change();

Pour moi, cela n'a fonctionné que lorsque j'ai ajouté le code suivant: Comme je voulais "réinitialiser" le formulaire, c'est-à-dire sélectionner toutes les premières options de toutes les sélections du formulaire, j'ai utilisé le code suivant:

$('form').find('select').each(function(){ $(this).val($("select option:first").val()); $(this).change(); });


1

Utilisation:

$("#selectbox option:first").val()

Veuillez trouver le fonctionnement simple dans ce JSFiddle .


Qu'en est-il de la position 15, 25 ou d'un texte spécifique? : D
Marcelo Agimóvel

L'appel .val()obtient simplement la valeur de la première option de la liste. Il ne sélectionne pas réellement (rendre sélectionné) la première option, comme cela a été demandé dans la question d'origine.
Funka

1

Pour moi, cela n'a fonctionné que lorsque j'ai ajouté la ligne de code suivante

$('#target').val($('#target').find("option:first").val());


0

Si vous stockez l'objet jQuery de l'élément select:

var jQuerySelectObject = $("...");

...

jQuerySelectObject.val(jQuerySelectObject.children().eq(0).val());

0

Vérifiez cette meilleure approche en utilisant jQuery avec ECMAScript 6 :

$('select').each((i, item) => {
  var $item = $(item);
  $item.val($item.find('option:first').val()); 
});

0

Vous pouvez sélectionner n'importe quelle option dropdownen l'utilisant.

// 'N' can by any number of option.  // e.g.,  N=1 for first option
$("#DropDownId").val($("#DropDownId option:eq(N-1)").val()); 

0

$('select#id').val($('#id option')[index].value)

Remplacez l' id par un ID de tag de sélection particulier et un index par l'élément particulier que vous souhaitez sélectionner.

c'est à dire

<select class="input-field" multiple="multiple" id="ddlState" name="ddlState">
                                        <option value="AB">AB</option>
                                        <option value="AK">AK</option>
                                        <option value="AL">AL</option>
</select>

Donc, ici, pour la sélection du premier élément, j'utiliserai le code suivant:

$('select#ddlState').val($('#ddlState option')[0].value)

-1

Utilisation:

alert($( "#target option:first" ).text());
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.