172 votes

Comment vérifier si une option est sélectionnée ?

$('#mySelectBox option').each(function() {
    if ($(this).isChecked())
       alert('this option is selected');
     else
       alert('this is not');
});

Apparemment, le isChecked ne fonctionne pas. Ma question est donc la suivante : quelle est la bonne façon de procéder ? Merci.

2 votes

00zebra00, merci d'avoir trouvé une réponse parmi les nombreuses options ci-dessous. Cependant, veillez à prendre note de la conversation dans les commentaires ci-dessous concernant la "meilleure" façon d'accéder à la propriété sélectionnée. L'idée générale est que lorsque vous pouvez accéder à un élément directement en javascript (en utilisant this.selected ) que vous devriez contourner en utilisant jQuery ( $(this).prop("selected") ) mais ils sera les deux travaillent pour vous.

0 votes

308voto

iambriansreed Points 9799

UPDATE

Une méthode jQuery plus directe vers l'option sélectionnée serait :

var selected_option = $('#mySelectBox option:selected');

Répondre à la question .is(':selected') est ce que vous recherchez :

$('#mySelectBox option').each(function() {
    if($(this).is(':selected')) ...

La méthode non jQuery (sans doute la meilleure pratique) serait la suivante :

$('#mySelectBox option').each(function() {
    if(this.selected) ...

Cependant, si vous cherchez simplement la valeur sélectionnée, essayez :

$('#mySelectBox').val()

Si vous cherchez le texte de la valeur sélectionnée, faites :

$('#mySelectBox option').filter(':selected').text();

Vérifiez : http://api.jquery.com/selected-selector/

La prochaine fois, cherchez des questions de type SO en double :

Obtenir l'option sélectionnée actuelle ou Définir l'option sélectionnée ou Comment obtenir l'option sélectionnée $(this) en jQuery ? ou l'option [selected=true] ne fonctionne pas

0 votes

Il utilise jQuery sans raison valable. Utilisez les propriétés DOM natives de js. Jetez un coup d'œil sur ce

3 votes

On dirait que vous n'avez pas lu ma réponse. this.selected peut être utilisé à la place de $(this).is(":selected") Je suppose qu'il n'y a pas besoin d'un jsperf pour ça, non ? Je n'ai rien contre l'utilisation de jQuery !, mais utilisez-le quand vous en avez besoin, pas quand il ne donne rien d'autre que des frais généraux et plus de code.

0 votes

@gdoron this.selected est tout à fait valable, mais il a demandé la manière correcte de le faire en jQuery.

27voto

gdoron Points 61066

Vous pouvez obtenir l'option choisie de cette façon :

$('#mySelectBox option:selected')...

DÉMO EN DIRECT

Mais si vous voulez itérer toutes les options, faites-le avec this.selected au lieu de this.isChecked qui n'existe pas :

$('#mySelectBox option').each(function() {
    if (this.selected)
       alert('this option is selected');
     else
       alert('this is not');
});

DÉMO EN DIRECT

Mise à jour :

Vous avez reçu de nombreuses réponses vous suggérant d'utiliser ceci :

$(this).is(':selected') et bien, cela peut être fait beaucoup plus rapidement et plus facilement avec this.selected alors pourquoi l'utiliser et non la méthode native des éléments du DOM !

Lire Connaître les propriétés et les fonctions de votre DOM dans le jQuery informations sur les étiquettes

1 votes

@downvoter, un commentaire ? sortez de l'ombre et battez-vous ! :)

0 votes

Peut-être parce que vous n'avez pas répondu à la question mais donné les meilleures pratiques ;)

1 votes

@iambriansreed. Ha ? ! Je n'ai pas répondu à la question ? quelle partie de la question est restée sans réponse ?

5voto

veeTrain Points 1615

Si vous n'êtes pas familier ou à l'aise avec is() vous pouvez simplement vérifier la valeur de prop("selected") .

Comme on le voit ici :

$('#mySelectBox option').each(function() {
    if ($(this).prop("selected") == true) {
       // do something
    } else {
       // do something
    }
});

Modifier :

Comme @gdoron l'a souligné dans les commentaires, le moyen le plus rapide et le plus approprié d'accéder à la propriété sélectionnée d'une option est de passer par le sélecteur DOM. Voici l'astuce mise à jour en affichant cette action.

if (this.selected == true) {

semble fonctionner tout aussi bien ! Merci gdoron.

0 votes

Pouvez-vous m'expliquer pourquoi il devrait utiliser $(this).prop("selected") au lieu de this.selected ? ! qu'est-ce que ça donne ??! p.s. Je ne suis pas le downvoter...

0 votes

@gdoron, le principal avantage auquel j'ai pensé est la familiarité. Je ne suis pas sûr de ce que is mais je préfère accéder à mes propriétés par prop et attr. Dans la plupart des scénarios, ce n'est peut-être qu'une question de goût. Oui, il y a une curieuse vague de votes négatifs !

2 votes

Je vous suggère de lire le Connaître les propriétés et les fonctions de votre DOM partie de la jQuery informations sur les étiquettes . il n'y a aucune raison d'utiliser un code plus lent + plus de code pour faire une chose simple. .is() doit être utilisé pour les sélecteurs complexes comme $(...).is('.foo > [name="aaa"] input') or for properties that are not native DOM elements properties like $(...).is(":visiable").

2voto

Mouna Cheikhna Points 12741

Utiliser

 $("#mySelectBox option:selected");

pour tester si c'est une option particulière myoption :

 if($("#mySelectBox option:selected").text() == myoption){
          //...
 }

0 votes

Je ne t'ai pas descendu (il y a une série de descentes ici !) mais qu'est-ce que c'est ? myoption ? ??

1 votes

Juste une chaîne qui est censée être un exemple d'option que le PO veut tester si elle est sélectionnée.

0 votes

En ce qui concerne le vote négatif, vous pourriez lire les commentaires sous le titre ma réponse .

0voto

Dans mon cas, je ne sais pas pourquoi la sélection est toujours vraie. La seule solution à laquelle j'ai pu penser est la suivante :

var optionSelected = false;
$( '#select_element option' ).each( function( i, el ) {
    var optionHTMLStr = el.outerHTML;

    if ( optionHTMLStr.indexOf( 'selected' ) > 0 ) {
        optionSelected = true;
        return false;
    }
});

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