Select simples/multiples : Bug IE?
Bonjour à tous,
Je souhaite mettre en place deux fenêtres "Select", transférer des "options" de l'une à l'autre, puis submiter tout le contenu de la première fenêtre pour l'envoyer au serveur.
Pour une question d'ergonomie IHM, les deux champs Select sont en mode "multiple = false" afin de manipuler les éléments un à un.
Pour submiter le contenu du Select dans son ensemble, je passe donc "multiple = true" au moment du submit pour autoriser la multiple sélection, puis je sélectionne l'ensemble des options à l'aide d'une boucle avant de submiter.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| function PostSelect(formulaire)
{
var cible = formulaire.elements["tab[]"];
// On compte le nombre d'item de la liste select
var nbCol = cible.length;
// on passe le Select en Multiple
cible.multiple = 'true';
// On lance une boucle pour selectionner tous les items
for (var a = 0; a < nbCol; a++)
{
cible.options[a].selected = 'selected';
}
// On soumet le formulaire
formulaire.submit();
} |
Le code fonctionne parfaitement sous Firefox.
Sous IE 6, il fonctionne.... presque. En effet, il se produit un phénomène qui ressemblerait à un bug d'IE : seule la dernière option du Select est sélectionnée... et transmise :?
Là où ça devient étrange, c'est qu'en apportant la modification suivante (en grisé), tout fonctionne parfaitement!!!
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| function PostSelect(formulaire)
{
var cible = formulaire.elements["tab[]"];
// On compte le nombre d'item de la liste select
var nbCol = cible.length;
// on passe le Select en Multiple
cible.multiple = 'true';
alert ("hello world");
// On lance une boucle pour selectionner tous les items
for (var a = 0; a < nbCol; a++)
{
cible.options[a].selected = 'selected';
}
// On soumet le formulaire
formulaire.submit();
} |
J'ai alors pensé que IE avait besoin d'un délai pour prendre en compte le changement d'état. J'ai donc inséré à la place du Alert une boucle for comptant de 1 à 100 ou 1000, sans résultat.
Bref, je ne sais pas comment résoudre ce problème.
Merci d'avance à ceux qui pourront m'aider...