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>
OMG
la source

Réponses:

957
$("#target").val($("#target option:first").val());
David Andres
la source
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);
Esben
la source
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');
user149513
la source
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.

Jimmy Huang
la source
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");
James Lee Baker
la source
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;
danactive
la source
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).

Bradley Bossard
la source
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')
Mélanie
la source
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;

});
Nick Petropoulos
la source
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

Aussi simple que ça:

$('#target option:first').prop('selected', true);
Ramon Schmidt
la source
1
c'est beaucoup mieux
Arun Prasad ES
7
$('#newType option:first').prop('selected', true);
FFFFFF
la source
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');
Francis Lewis
la source
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.

Dark Jon
la source
5

Voici comment je le ferais:

$("#target option")
    .removeAttr('selected')
    .find(':first')     // You can also use .find('[value=MyVal]')
        .attr('selected','selected');
Fabrizio
la source
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');
Pablo SG Pacheco
la source
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.

Gary - ITB
la source
2

Cela a fonctionné pour moi!

$("#target").prop("selectedIndex", 0);
Archana Kamath
la source
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');
Matthew Scott
la source
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(); });

Jean Douglas
la source
1

Utilisation:

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

Veuillez trouver le fonctionnement simple dans ce JSFiddle .

Chétan
la source
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());
Muhammad Qasim
la source
0
$("#target").val(null);

bien travaillé en chrome

Krishna Murthy
la source
0

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

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

...

jQuerySelectObject.val(jQuerySelectObject.children().eq(0).val());
Daniel
la source
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()); 
});
jdnichollsc
la source
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()); 
Arsman Ahmad
la source
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)
Hitesh Kalwani
la source
-1

Utilisation:

alert($( "#target option:first" ).text());
GobsYats
la source