Travailler avec un select en JavaScript
#1 Introduction
Pour faire ce tutoriel, des connaissances HTML sur les formulaires et les champs de formulaires sont nécessaires. Si vous avez besoin, vous avez un tutoriel dans la partie HTML-CSS de ce site ici. De plus, si vous avez fait les tutoriels JavaScript sur le DOM, cette partie devrait vous paraître assez facile.
#2 Comment se présente le sélecteur en JavaScript ?
- Prenez Sublime Text et créez un fichier
select.html
sur votre bureau. - Tapez
CTRL
+SHIFT
+G
. - Tapez
!>(form>select>option[value=$]{$}*3)+script
+TAB
. - Placez le curseur de Sublime devant le
1
du contenu du premier élémentoption
, puis faireCTRL
+ALT
+flèche vers le bas
pour déplacer le curseur multiple de Sublime, puis vous tapezChoix
, puisespace
.
- Déclarez une variable
elt
et affectez-la à unquerySelector()
sur leselect
. - Avec Sublime, faites un Open In Browser pour exécuter le fichier dans le navigateur (Prenez plutôt Chrome de sorte que l'on voit la même chose).
- Ouvrez la console et tapez
elt.options
. - Développez et constatez que pour chaque option du select en HTML, vous avez en JavaScript une entrée dans le tableau
options
. Donc ici, vous retrouvez vos 3 options du HTML. - Notez que vous avez une propriété
length
qui correspond évidemment à la taille du tableau. - Vous avez également une propriété
selectedIndex
qui vous indique quel est l'option qui est sélectionnée (N'oubliez pas que l'on commence à zéro au niveau des éléments du tableauoptions
).
- Développez une entrée, vous constatez qu'il y a pas mal de choses. On va s'intéresser à 3 d'entres elles :
- La propriété
label
qui correspond au contenu textuel de l'option. - La propriété
selected
qui est un booléen qui vous indique si l'entrée est sélectionnée ou pas (N'oubliez pas que l'on peut faire de la sélection multiple, car c'est dans ce cas là, que ça vous servira). - La propriété
value
qui correspond à la valeur duvalue
de l'option.
- La propriété
- Développez le prototype
HTMLOptionsCollection
et constatez qu'il y a des méthodes pour ajouter des éléments ou les supprimer. Je vous montrerai plus loin dans ce tuto une autre façon d'ajouter un élémentoption
à unselect
.
#3 La propriété selectedIndex
- Vous pouvez connaître la position du sélecteur au moyen de la propriété
selectedIndex
. Vous pouvez y accéder directement au niveau de l'élément, (vous n'avez pas besoin de descendre sur le tableau options). - Vous allez mettre en place un gestionnaire d'événement sur le
select
et demander à écouter l'événementchange
. - Puis faire un
console.log()
duselectedIndex
.
- Changez la position du sélecteur et constatez l'affichage dans la console de la valeur de la propriété
selectedIndex
. - Constatez, entre autres, que pour la position
Choix 1
leselectedIndex
a la valeur0
.
- Maintenant, vous allez positionner le sélecteur à l'aide du
selectedIndex
. Affectez-lui la valeur2
, et constatez qu'il est positionné sur la positionChoix 3
.
#4 La propriété value
- La valeur de
value
correspond à l'option sélectionnée. Remettez en place le gestionnaire d'événement et faites unconsole.log()
devalue
.
- Supprimez le gestionnaire d'événement. Vous pouvez aussi positionner le sélecteur en vous servant de
value
. Affectez-lui la valeur2
et constatez que le sélecteur se positionne sur cette valeur devalue
. - Ajouter une option avec un
value
que vous affectez à la chaîne de caractères'dix'
et affectezvalue
à'dix'
. - Constatez que le sélecteur se positionne sur cette valeur.
#5 Le tableau options
- Affichez avec des
console.log()
les valeurs des propriétéslabel
,value
,selected
pour les options de rang0
et1
.
- On va regarder maintenant comment ajouter une option. Il y a plusieurs façons de le faire et je vous montre la méthode que je préfère. Pour cela, créez une nouvelle instance de l'objet
Option
avec unnew Option
. Mettez en premier argument la valeur dulabel
et en deuxième argument la valeur devalue
. - Ajoutez ensuite ce nouvel élément en fin du tableau
options
.
#6 La sélection multiple avec un select
- Au niveau HTML, ajoutez
multiple
dans la balise ouvrante select. - Pour rappel, si côté serveur, vous voulez recevoir un tableau PHP, il faut mettre un attribut
name
égal à une variable avec une paire de crochets comme ceciname=choix[]
. - Le problème ici, c'est que le
selectedIndex
est un entier et pas un tableau. Alors si on veut avoir le tableau des options qui sont sélectionnées, eh bien, il va falloir le fabriquer à partir d'un parcours du tableauoptions
en testant la propriétéselected
pour chaque option. - Avec la propriété
size
, fixez la valeur de la fenêtre du select à 3 éléments.