174 votes

Définir l'indice de sélection d'une liste déroulante à l'aide de jQuery

Comment puis-je définir l'index d'une liste déroulante en jQuery si la façon dont je trouve le contrôle est la suivante :

$("*[id$='" + originalId + "']") 

Je procède ainsi parce que je crée des contrôles de façon dynamique et que les identifiants sont modifiés lors de l'utilisation des formulaires Web. J'ai trouvé cette solution de contournement pour trouver des contrôles. Mais une fois que j'ai l'objet jQuery, je ne sais pas comment régler l'index sélectionné sur 0 (zéro).

362voto

gnarf Points 49213

Tout d'abord, ce sélecteur est plutôt lent. Il va parcourir chaque élément du DOM à la recherche des identifiants. Les performances seront moins affectées si vous pouvez attribuer une classe à l'élément.

$(".myselect")

Pour répondre à votre question, il existe plusieurs façons de modifier la valeur des éléments de sélection en jQuery.

// sets selected index of a select box to the option with the value "0"
$("select#elem").val('0'); 

// sets selected index of a select box to the option with the value ""
$("select#elem").val(''); 

// sets selected index to first item using the DOM
$("select#elem")[0].selectedIndex = 0;

// sets selected index to first item using jQuery (can work on multiple elements)
$("select#elem").prop('selectedIndex', 0);

0 votes

Y a-t-il un meilleur moyen de le faire ? Je pensais qu'il fallait scanner tout le DOM pour trouver l'ID, mais comme je suis novice en jQuery, je me suis dit qu'il fallait le faire fonctionner et voir ensuite s'il y avait une meilleure façon de le faire. Tout conseil sera apprécié.

0 votes

Oui, si vous pouvez attribuer une classe à l'élément ou aux éléments que vous devez trouver, le sélecteur sera beaucoup plus rapide.

0 votes

Les identifiants ne sont-ils pas plus rapides ?

108voto

4imble Points 3494

Je viens de trouver ceci, ça marche pour moi et je trouve personnellement que c'est plus facile à lire.

Ceci définira l'index réel tout comme l'option de la réponse numéro 3 de gnarf.

// sets selected index of a select box the actual index of 0 
$("select#elem").attr('selectedIndex', 0);

Cela ne fonctionnait pas avant mais fonctionne maintenant... voir le bug : http://dev.jquery.com/ticket/1474

Addendum

Comme recommandé dans les commentaires, utilisez :

$("select#elem").prop('selectedIndex', 0);

30 votes

Et à partir de jQuery 1.6, vous devez utiliser .prop('selectedIndex', 0); indépendamment du fait que .attr() fonctionne ou pas :)

1 votes

Correct, il se peut en fait que cela ne fonctionne pas dans la version 1.7. Voir la réponse acceptée : stackoverflow.com/questions/8010664/

0 votes

+1 pour l'addendum. Mon ancien code s'est cassé à cause de ce problème

10voto

sathya Points 578

Code JQuery :

$("#sel_status").prop('selectedIndex',1);

Code Jsp :

Status:
<select name="sel_status"
    id="sel_status">
    <option value="1">-Status-</option>
    <option>ALL</option>
    <option>SENT</option>
    <option>RECEIVED</option>
    <option>DEACTIVE</option>
</select>

9voto

djs Points 81

J'utilise

$('#elem').val('xyz');

pour sélectionner l'élément d'option qui a pour valeur='xyz'.

3voto

MacAnthony Points 2327

Vous voulez saisir la valeur de la première option dans l'élément de sélection.

$("*[id$='" + originalId + "']").val($("*[id$='" + originalId + "'] option:first").attr('value'));

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