.!. ATTENTION .!. I. Quand vous avez un élément « select » avec par exemple un ID « id=list », l’instruction suivante : document.getElementById("list").value="NIMPORTEQUOI"; sélectionne donc l’option qui a la value « NIMPORTEQUOI ». Si aucune option n’a la va-lue == NIMPORTEQUOI, toutes les options seront désélectionnées.
L’ ÉLÉMENTEN JAVASCRIPT <SELECT> P o u r D é b u t a n tJ AVA S C R I P T(Programmation Internet)V O L . X X I V J.B. Dadet DIASOLUKA Luyalu Nzoyifuanga +243 - 851278216 - 899508675 - 995624714 - 902263541 - 813572818 diasfb@mail2world.com
I.L’ÉLÉMENT SELECT: L’élément «select» est très important et est le substratum quand on doit choisir dans une Liste Déroulante(Drop Down List) = liste de choix. C’est un élément richissime qui pos sède beaucoup de fonctionnalités et offre une quasi infinité de possibilités dont nous al lons parcourir ici quelquesunes. Quand on ne maîtrise pas cet élément (SELECT) il paraît vraiment comme rébarbatif mais comme on le verra ciaprès, c’est un élémentpourtant très facile et très intéressant à utili ser, rendant la programmation en JavaScript plus agréable que jouer au puzzle ou au scrabble. De plus sans lui on ne peut ni avoir les listes déroulantes de choix, ni pouvoir les utiliser sans passer par des procédures réservées aux génies. L’élément «select» doit avoir un attribut ou propriéténame (nom)et/ou uneID, et un EventListenerqui est souvent et de façon plus pratique «onchange». L’EventHandler «onselect» n’agit pas, tandis que le«onKeyUp» n’agit que quand la touche est «RETURN» ou une destouches de con trôleet même la touche «ESCAPE» = «ÉCHAP» est appuyée puis relâchée après sé lection et ce autant de fois qu’on les frappe. Cet aspect est très important car une même action peut « rafaler » sans contrôle. La propriété «value» est la valeur renvoyée avec le formulaire «form» quand celleci est envoyée («submitted»). La «value» de l’élément «select» est celle del’option sélectionnée. Au chargement, c’est la dernièreoption présélectionnée qui est retenue comme sélectionnée. La propriété «text» est le texte qui apparaît dans le «drop down box». La propriété «selectedOptions» de «HTMLSelectElementPrototype» liste toutes les options sélectionnées. Voici quelques exploitations de cette propriété. <selectclass=cSelsize=10multiple><optionvalue="AUR">Aura</option><optionvalue="AMB">Amblyopie</option>
J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-XXIV<optionvalue="AMR"selected=true>Amaurose</option><optionvalue="CCT">Cécité Corticale</option><optionvalue="SCC">Scotome Central</option><optionvalue="SCS"selected="selected">Scotome Scintillant</option><optionvalue="SCP">Scotome Positif</option><optionvalue="SCN">Scotome Négatif</option><optionvalue="PST"selected>Post-Image</option><optionvalue="MCT">Migraines Cataméniales</option></select><scripttype="text/javascript">"use strict";consts=document.querySelector(".cSel"),sv=s.value,si=s.selectedIndex,so=s.selectedOptions;for(letiinso)console.log(so[i])// => <option value="AMR" selected="true">// => <option value="SCS" selected="selected">// => <option value="PST" selected="">// => function item()// => function namedItem()// => 3for(letiofso)console.log(i)// Mieux que le for...in// => <option value="AMR" selected="true">// => <option value="SCS" selected="selected">// => <option value="PST" selected="">for(leti=0,l=so.length;i<l;i++)// Mieux que for...inconsole.log(so[i])// => <option value="AMR" selected="true">// => <option value="SCS" selected="selected">// => <option value="PST" selected="">console.dir("s.value =",sv);// s.value = AMRconsole.dir("s.selectedIndex =",si);// s.selectedIndex = 2console.log("value de s.selectedIndex =",s[si]);// value de s.selectedIndex =value="AMR" selected="true">// <option console.log("value de s.selectedIndex =",s[si].value);// value de s.selectedIndex = AMRconsole.log("text de s.selectedIndex =",s[si].text);// text de s.selectedIndex = Amauroseconsole.log("textContent de s.selectedIndex =",s[si].textContent);// textContent de s.selectedIndex = Amauroseconsole.log("innerHTML de s.selectedIndex =",s[si].innerHTML);L’élément < Select >2 / 93 - 6. mars 2019 (12:28 )- mercredi,
J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-XXIV// innerHTML de s.selectedIndex = Amauroseconsole.log("outerHTML de s.selectedIndex =",s[si].outerHTML);// outerHTML de s.selectedIndex =value="AMR" selected="true">Amaurose</option>// <option console.log("innerText de s.selectedIndex =",s[si].innerText);// innerText de s.selectedIndex = Amauroseconsole.dir("s.selectedOptions =",so);// s.selectedOptions =// HTMLCollection(3)// 0: <option value="AMR" selected="true"><option value="SCS" selected="selected">// 1: <option value="PST" selected="">// 2: 3// length: // <prototype>: HTMLCollectionPrototype {// item: item(), namedItem: namedItem(), length: Getter,//…}</script> Exécution : La boucle «for in» liste même des éléments internes «cachés».
La boucle «for of» ne liste que les éléments attendus (ceux qui nous concernent directement).
Voicil’essentiel de la gestion de «Select » : Cet exemple vaut pour les sélections multiples. <selectsize=7class="sid"multiple> <optionvalue="Lc">Leucome cornée</option> <optionvalue="Xe"selected>Xérophtalmie</option> <optionvalue="Ca">Cataracte</option> L’élément < Select >6. mars 2019 (12:28 )- mercredi, 3 / 93 -
J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-XXIV<selectsize=3onChange="fct(this,this.value);"id="sid"><optionvalue="Xe">Xérophtalmie</option><optionvalue="Ca">Cataracte</option><optionvalue="Gl"selected="selected">Glaucome</option><optionvalue="Tr">Blunt Trauma</option><optionvalue="Np"selected="selected">Neurapraxis</option><optionvalue="Hc"selected="selected">Hemispherectomie</option></select><scripttype="text/javascript">'use strict';constfct=(s,v)=>{console.log("La value de l'option sélectionnée est =",v);console.log("s[s.selectedIndex].text =",s[s.selectedIndex].text);console.log("s.selectedOptions[0].text =",s.selectedOptions[0].text);}</script> Exécution :
< Ceci, au chargement !
Quand aucune option n’est sélectionnée, aucune d’entre elles ne sera automatiquement sélectionnée. Mais quand plusieurs options sont sélectionnées, il y a deux possibiités : 1. Si l’attribut «multiple» est spécifié => toutes les options sélectionnées seront sélec tionnées ; <selectid="iSel"class="cSel"multiple size=5> <optionvalue="eb">EBALE</option> <optionvalue="sn">SANI</option>
J.D.B. DIASOLUKA Nz. LuyaluTome- JavaScript XXIV <optionvalue="ep"selected>EPASOLA</option> <optionvalue="nz">NZETE</option> <optionvalue="eb"selected>EBALE</option> </select>Notez dans le code source cidessus quel’ «option» avec la «value» (et son «la beloutexte» identique «EBALE») sont repris deux fois, la première fois non sélec tionnée, la deuxième fois sélectionnée.Cela a été respecté dans l’affichageavec Yan dex & QupZilla cidessous à gauche avec sélection en gris, et Firefox avec sélection en bleu. Si on rafraîchit la page, tout est sta tus quo avec yandex et QupZilla ; tandis qu’avec Firefox quand on ra fraîchit la page, la première occur rence de l’option avec «va lue="eb"» et label = «EBALE» devient aussi sélectionnée. 2. Si l’attribut «multiple»n’est pas spécifié =>c’est la dernière option rencontrée dans la liste à sélection multiple qui est automatiquement sélectionnée [avec les trois navi gateurs]. <selectid="iSel"class="cSel"size=5> <optionvalue="eb">EBALE</option> <optionvalue="sn">SANI</option> <optionvalue="ep"selected>EPASOLA</option> <optionvalue="nz">NZETE</option> <optionvalue="eb"selected>EBALE</option> </select>
3. Bien entendu, si «multiple» est spécifié alors qu’aucun élément n’est sélectionné, il n’aura aucun effet. <selectid="iSel"class="cSel"multiple size=5> <optionvalue="eb">EBALE</option> <optionvalue="sn">SANI</option> <optionvalue="ep">EPASOLA</option> <optionvalue="nz">NZETE</option> <optionvalue="eb">EBALE</option> </select>
L’accès à unélément HTML/DOMpeut se faire de plusieurs manières, soit avec un «do cument . getElementById ( )» ou un peu plus délicatement (en respectant le point de vant le om de classe) avec un «document . querySelector ( )», soit très péniblement avec un «document . getElementsByName ( )». La méthode «document . querySelector ( )» utilisée avecl’attribut «class =» a exac tement le même effet que la méthode «document . getElementById ( )» utilisée avec l’attrbut «id =». Utilisonsla version avec l’attribut «multiple» spécifié, et appuyons le bouton « SUBMIT » après rafraîchissement de la page. <form> <selectid="iSel"class="cSel"size=5multiple> <optionvalue="eb">EBALE</option> <optionvalue="sn">SANI</option> <optionvalue="ep"selected>EPASOLA</option> <optionvalue="nz">NZETE</option> <optionvalue="eb"selected>EBALE</option> </select> </form> <ahref="javascript:void(f())">SUBMIT</a> <script>"use strict"; constf= _ => { consts = document.getElementById('iSel'); // Notez l'absence de point devant le nom d'id « iSel » console.log(s.value); constc = document.querySelector('.cSel'); // Notez le point devant le nom de classe « cSel ». console.log(s.value); constss = s.selectedOptions; constcs = c.selectedOptions; console.log(ss); console.log(cs); for(letiofss) console.log(`${".".repeat(3)} ${ i.value}`); for(letiofcs) console.log(`${".".repeat(9)} ${ i.value}`); } </script>
Listage de TOUTES les options (les sélectionnées et non), via la méthode «getEle mentsByName», en indiquant celles qui sont sélectionnées : <selectname="nSel"size=5multiple> <optionvalue="eb">EBALE</option> <optionvalue="sn">SANI</option> <optionvalue="ep"selected="selected">EPASOLA</option> <optionvalue="nz">NZETE</option> <optionvalue="eb"selected="selected">EBALE</option> </select> <br><buttononclick="f()">SUBMIT</button> <script>"use strict"; constf= _ => { consts = document.getElementsByName('nSel'); // Notez l'absence de point devant le nom d'id « iSel » lett=""; for(letiofs[0]) { t=`${ i.value}<=>${ i.innerHTML}`; if(i.selected)t+=" Selected."; console.log(t); } } </script>Avec Firefox : Trois options sélectionnées.
Avec Yandex : Deux options seulement sélectionnées.