Bonjouuuuuuur,
Ça fait une heure que je planche sur ce problème donc il est sans doute temps de poster.
D'abord, sachez que ce problème est particulier à IE et qu'il ne se pose pas sous Firefox.
J'ai une CheckBox, et lorsque l'on clique dessus, je veux que des boutons Radio qui étaient "disabled" ne le soient plus.
Voilà mon code JavaScript :
Le code HTML (généré par ASP.net 2.0) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 function ClickCheckBox(Objet) { //Spécial IE if(window.navigator.appName == 'Microsoft Internet Explorer') { var SpanRadio = document.getElementById(Objet).parentNode.nextSibling.getElementsByTagName("span"); for (i in SpanRadio) { SpanRadio[i].disabled = !document.getElementById(Objet).checked; } } var ListeRadio = document.getElementById(Objet).parentNode.nextSibling.getElementsByTagName("input"); for (i in ListeRadio) { ListeRadio[i].disabled = !document.getElementById(Objet).checked; ListeRadio[i].type = "checkbox"; alert(ListeRadio[i].disabled); } }
La partie "spécial IE" est inutile sous Firefox, mais sous IE, à défaut de rendre les boutons Radio "enabled" elle enlève l'effet grisé sur le texte dans le span ("Un peu", "Beaucoup", "A la folie"). Le code généré par ASP.net implique que je n'ai pas complètement la main sur la structure HTML.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <tr><td><input name="GridViewInterets$ctl05$CheckBoxInterets" type="checkbox" id="GridViewInterets_ctl05_CheckBoxInterets" onclick="javascript:ClickCheckBox(this.id);" /></td> <td style="width:100px;"> <table id="GridViewInterets_ctl05_RadioButtonListInterets" border="0"> <tr> <td><span disabled="disabled"><input id="GridViewInterets_ctl05_RadioButtonListInterets_0" type="radio" name="GridViewInterets$ctl05$RadioButtonListInterets" value="Un peu" checked="checked" disabled="disabled" /><label for="GridViewInterets_ctl05_RadioButtonListInterets_0">Un peu</label></span></td> </tr><tr> <td><span disabled="disabled"><input id="GridViewInterets_ctl05_RadioButtonListInterets_1" type="radio" name="GridViewInterets$ctl05$RadioButtonListInterets" value="Beaucoup" disabled="disabled" /><label for="GridViewInterets_ctl05_RadioButtonListInterets_1">Beaucoup</label></span></td> </tr><tr> <td><span disabled="disabled"><input id="GridViewInterets_ctl05_RadioButtonListInterets_2" type="radio" name="GridViewInterets$ctl05$RadioButtonListInterets" value="A la folie" disabled="disabled" /><label for="GridViewInterets_ctl05_RadioButtonListInterets_2">A la folie</label></span></td> </tr> </table>
Chose étrange, le "alert" dans mon code JavaScript me renvoie bien "true" ou "false" quand je clique sur la checkbox sous IE, mais les boutons Radio restent grisés. Il faut que à la main, avec la Developer Toolbar de IE, je supprime l'attribut "disabled" des <input type="radio" /> pour enlever le grisé.
On en arrive donc au sujet de mon message : IE prend en compte le ".disabled = true/false;", mais ne modifie pas l'affichage en conséquence(???).
De la même manière, en faisant "ListeRadio[i].type = "checkbox";", Firefox transforme bien les boutons Radio en CheckBox mais pas IE.
Alors? Bug de IE?
Merci d'avance pour vos suggestions et réponses.
Partager