Je fais face à une petite difficulté et j’aimerais avoir votre avis.
Sur une page Web, je propose un formulaire. Sur cette page, une combobox est proposée mais l’utilisateur a la possibilité de créer un autre item de cette combobox, lui permettant de choisir plusieurs valeurs.
Pour être plus clair, disons que on a:
une combobox (avec par exemple une liste de couleurs)
un bouton “Choisir une autre couleur” ; si on clique dessus, une autre combobox (identique à la première) apparaît
La fonction javascript qui ajoute un item de la combobox
function addColor() {
var tbodyElem = document.getElementById("table_selection_couleur");
var trElem, tdElem, txtNode;
trElem = tbodyElem.insertRow(tbodyElem.rows.length);
tdElem = trElem.insertCell(trElem.cells.length);
var text = '<select name="list_couleurs[]"><option value="" SELECTED>Please Select</option><option value="29">Bleu</option><option value="30">Rouge</option><option value="31">Vert</option></select>';
tdElem.innerHTML = text;
}
Le problème est que quand je soumets le formulaire, je ne récupère la valeur que de l’item initialement présent sur la page et pas des items générés dynamiquement.
J’ai fait le test avec plusieurs combobox posées dès le départ et ça marche correctement c’est-à-dire que (je peux parcourir le tableau de valeurs via $HTTP_POST_VARS[‘list_couleurs’].
Je pense que le problème vient de ta façon de nommer les éléments. Si tu passes plusieurs fois “list_couleurs[ ]” dans une url, tu auras effectivement un tableau (list_couleurs) contenant tes valeurs.
Par contre, je ne suis pas sûr que tu puisse soumettre plusieurs “list_couleurs[ ]”…
Je pense que si tu met la clé à chaque fois ça marchera : list_couleurs[1], list_couleurs[2]…
Comment expliquer que si j’écris dès le départ les deux select (donc non créés dynamiquement par javascript), ça marche ? Dans ce cas, je récupère bien un tableau de valeurs via $HTTP_POST_VARS[‘list_couleurs’].
Mais que les valeurs sélectionnées. Ce qui est bien ce que je t’ai dis. Maintenant ton champs n’est peut-être pas pris en compte quand généré. Essaye de coller un autre nom voir si c’est pas ça la cause.
OK, je sais d’où ça vient. Le code n’est pas compatible avec FF.
J’ai testé sous IE et ça marche. (Attention, je n’accuse personne, pas la peine de troller !).
En fait, il faut que je modifie mon code pour qu’il soit compatible avec les deux navigateurs. Je vais devoir faire un “if (navigateur)” et ça me saôule !
Tiens, c’est vrai que ça me rappelle un truc cette erreur.
Tu devrais parcourir les éléments de ton formulaire voir ce qu’il y a.
Sinon, essaye de générer tes éléments via DOM :
var selectElement = document.createElement('select');
selectElement.setAttribute('name', 'list_couleurs[]'); // ++ ajout des options
selectElement.form = ...; // formulaire parent, à ne faire que si erreur
tdElem.appendChild(selectElement);