J'ai une liste déroulante avec des valeurs connues. Ce que j'essaie de faire, c'est de définir la liste déroulante sur une valeur particulière que je sais exister à l'aide de jQuery . En utilisant du JavaScript normal , je ferais quelque chose comme:
ddl = document.getElementById("ID of element goes here");
ddl.value = 2; // 2 being the value I want to set it too.
Cependant, je dois le faire avec jQuery , car j'utilise une classe CSS pour mon sélecteur ( ids de client ASP.NET stupides ...).
Voici quelques choses que j'ai essayées:
$("._statusDDL").val(2); // Doesn't find 2 as a value.
$("._statusDDL").children("option").val(2) // Also failed.
Comment puis-je le faire avec jQuery ?
Mise à jour
Donc, en fin de compte, je l'ai bien fait la première fois avec:
$("._statusDDL").val(2);
Lorsque je mets une alerte juste au-dessus, cela fonctionne bien, mais lorsque je supprime l'alerte et la laisse s'exécuter à pleine vitesse, j'obtiens l'erreur
Impossible de définir la propriété sélectionnée. Index non valide
Je ne sais pas si c'est un bogue avec jQuery ou Internet Explorer 6 (je suppose Internet Explorer 6 ), mais c'est terriblement ennuyeux.
la source
dd1 = document.getElementsByClassName('classname here'); dd1.value = 2;
Réponses:
La documentation de jQuery indique:
Ce comportement est dans les
jQuery
versions1.2
et au-dessus.Vous le souhaitez très probablement:
la source
select
est caché (display: none;
)? Je n'arrive pas à faire fonctionner correctement ...$('._statusDDL [value="2"]').attr('selected',true);
Merci!.change()
pour voir l'option dans la liste déroulante frontend, c'est$('#myID').val(3).change();
Avec un champ caché, vous devez utiliser comme ceci:
ou
la source
Juste un FYI, vous n'avez pas besoin d'utiliser des classes CSS pour accomplir cela.
Vous pouvez écrire la ligne de code suivante pour obtenir le nom de contrôle correct sur le client:
ASP.NET restituera correctement l'ID de contrôle dans jQuery.
la source
Essayez avec
et pas avec
la source
Ces solutions semblent supposer que chaque élément de vos listes déroulantes a une valeur val () relative à leur position dans la liste déroulante.
Les choses sont un peu plus compliquées si ce n'est pas le cas.
Pour lire l'index sélectionné d'une liste déroulante, vous utiliseriez ceci:
Pour définir l'index sélectionné d'une liste déroulante, vous utiliseriez ceci:
Notez que la fonctionnalité prop () nécessite JQuery v1.6 ou ultérieure.
Voyons comment vous utiliseriez ces deux fonctions.
Supposons que vous disposiez d'une liste déroulante de noms de mois.
Vous pouvez ajouter un bouton "Mois précédent" et "Mois suivant", qui examine l'élément de liste déroulante actuellement sélectionné et le remplace par le mois précédent / suivant:
Et voici le JavaScript que ces boutons exécuteraient:
Le site suivant est également utile pour montrer comment remplir une liste déroulante avec des données JSON:
http://mikesknowledgebase.com/pages/Services/WebServices-Page8.htm
Phew !!
J'espère que cela t'aides.
la source
Après avoir examiné certaines solutions, cela a fonctionné pour moi.
J'ai une liste déroulante avec quelques valeurs et je veux sélectionner la même valeur dans une autre liste déroulante ... Alors d'abord, je mets dans une variable la
selectIndex
de ma première liste déroulante.Ensuite, je sélectionne cet index dans ma deuxième liste déroulante.
Remarque:
Je suppose que c'est la solution la plus courte, fiable, générale et élégante.
Parce que dans mon cas, j'utilise l'attribut de données de l'option sélectionnée au lieu de l'attribut de valeur. Donc, si vous n'avez pas de valeur unique pour chaque option, la méthode ci-dessus est la plus courte et la plus douce !!
la source
Je sais que c'est une vieille question et les solutions ci-dessus fonctionnent bien, sauf dans certains cas.
Comme
Donc, l'élément 4 apparaîtra comme "Sélectionné" dans le navigateur et maintenant vous voulez changer la valeur comme 3 et afficher "Article3" comme sélectionné au lieu de Item4. Donc, selon les solutions ci-dessus, si vous utilisez
Vous verrez cet élément 3 comme sélectionné dans le navigateur. Mais lorsque vous traitez les données soit en php soit en asp, vous trouverez la valeur sélectionnée comme "4". La raison en est que votre html ressemblera à ceci.
et il obtient la dernière valeur comme "4" dans la langue côté serveur.
DONC MA SOLUTION FINALE SUR CE REGARD
EDIT : Ajoutez un guillemet simple autour de "+ newselectedIndex +" afin que la même fonctionnalité puisse être utilisée pour les valeurs non numériques.
Donc, ce que je fais est en fait, supprimé l'attribut sélectionné, puis faites le nouveau comme sélectionné.
J'apprécierais les commentaires à ce sujet de programmeurs seniors comme @strager, @ y0mbo, @ISIK et d'autres
la source
Si nous avons une liste déroulante avec un titre de "Classification des données":
Nous pouvons le mettre dans une variable:
Ensuite, mettez dans une autre variable la valeur que nous voulons que la liste déroulante ait:
Ensuite, nous pouvons utiliser le champ que nous avons mis
dataClsField
, faire une recherchemyValue
et le sélectionner en utilisant.prop()
:Ou, vous pouvez simplement utiliser
.val()
, mais votre sélecteur de.
ne peut être utilisé que s'il correspond à une classe dans la liste déroulante, et vous devez utiliser des guillemets sur la valeur entre parenthèses, ou simplement utiliser la variable que nous avons définie précédemment:la source
J'ai rencontré cela plusieurs fois lors du chargement de données à partir d'un appel Ajax. Moi aussi, j'utilise .NET, et il faut du temps pour s'adapter au clientId lors de l'utilisation du sélecteur jQuery. Pour corriger le problème que vous rencontrez et éviter d'avoir à ajouter une
setTimeout
propriété, vous pouvez simplement mettre "async: false
" dans l'appel Ajax, et cela donnera au DOM suffisamment de temps pour récupérer les objets que vous ajoutez à la sélection. Un petit échantillon ci-dessous:la source
Juste une note - j'ai utilisé des sélecteurs génériques dans jQuery pour récupérer des éléments obscurcis par les ID clients ASP.NET - cela pourrait vous aider aussi:
Notez le caractère générique id * - cela trouvera votre élément même si le nom est "ctl00 $ ctl00 $ ContentPlaceHolder1 $ ContentPlaceHolder1 $ MyDropDown"
la source
J'utilise une fonction d'extension pour obtenir les identifiants des clients, comme ceci:
Ensuite, vous pouvez appeler des contrôles ASP.NET dans jQuery comme ceci:
la source
Une autre option consiste à définir le paramètre de contrôle ClientID = "Static" dans .net, puis vous pouvez accéder à l'objet dans JQuery par l'ID que vous définissez.
la source
Utilisez
$("select[name$='MyDropDown']").val()
.la source
$
afin qu'il s'agisse d'une correspondance complète, et non pas de «se terminant par». Mais votre suggestion est probablement plus rapide que de faire correspondre uniquement un nom de classe. Encore plus rapide seraitelement.classname
ou#idname
.Comment chargez-vous les valeurs dans la liste déroulante ou déterminez-vous la valeur à sélectionner? Si vous faites cela en utilisant Ajax, la raison pour laquelle vous avez besoin du délai avant que la sélection ne se produise pourrait être parce que les valeurs n'ont pas été chargées au moment de l'exécution de la ligne en question. Cela expliquerait également pourquoi cela a fonctionné lorsque vous avez mis une instruction d'alerte sur la ligne avant de définir l'état, car l'action d'alerte donnerait suffisamment de retard pour le chargement des données.
Si vous utilisez l'une des méthodes Ajax de jQuery, vous pouvez spécifier une fonction de rappel, puis la mettre
$("._statusDDL").val(2);
dans votre fonction de rappel.Ce serait un moyen plus fiable de gérer le problème, car vous pouvez être sûr que la méthode s'exécute lorsque les données sont prêtes, même si cela prend plus de 300 ms.
la source
ClientIDMode = "Static"
la source
Dans mon cas, j'ai pu le faire fonctionner en utilisant la méthode .attr ().
la source