Modifier la valeur sélectionnée d'une liste déroulante avec jQuery

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 dont je connais l'existence en utilisant jQuery. En utilisant le 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 (stupides identifiants client [ASP.NET][1]...).

Voici quelques essais que j'ai effectués :

$("._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

Il s'avère que j'avais raison la première fois :

$("._statusDDL").val(2);

Lorsque je place une alerte juste au-dessus, cela fonctionne bien, mais lorsque j'enlève l'alerte et que je laisse le système fonctionner à plein régime, j'obtiens l'erreur suivante

Impossible de définir la propriété sélectionnée. Index invalide

Je ne sais pas si c&#8217est un bogue de jQuery ou d&#8217Internet Explorer 6 (je suppose qu&#8217Internet Explorer 6), mais c&#8217est terriblement ennuyeux.

[1] : http://en.wikipedia.org/wiki/ASP.NET

Solution

[La documentation de jQuery][1] indique :

[jQuery.val] vérifie, ou sélectionne, tous les boutons radio, cases à cocher et options de sélection qui correspondent à l'ensemble des valeurs.

Ce comportement est présent dans les versions jQuery 1.2` et supérieures.

C'est ce que vous voulez le plus souvent :

$("._statusDDL").val('2');

[1] : http://docs.jquery.com/Attributes/val#val

Commentaires (9)

Essayez simplement avec

$("._statusDDL").val("2");

et non avec

$("._statusDDL").val(2);
Commentaires (0)

Comment chargez-vous les valeurs dans la liste déroulante ou comment déterminez-vous la valeur à sélectionner ? Si vous utilisez Ajax, la raison pour laquelle vous avez besoin d'un délai avant la sélection pourrait être 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 placé une déclaration d'alerte sur la ligne avant de définir l'état, puisque l'action d'alerte donne un délai suffisant 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 et mettre $("._statusDDL").val(2); dans votre fonction de rappel.

Ce serait une façon plus fiable de traiter le problème, car vous pourriez être sûr que la méthode a été exécutée lorsque les données étaient prêtes, même si cela a pris plus de 300 ms.

Commentaires (0)