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’est un bogue de jQuery ou d’Internet Explorer 6 (je suppose qu’Internet Explorer 6), mais c’est terriblement ennuyeux.
[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');
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.