Page 1 sur 2

générateur formulaire/select list

Posté : 24 déc. 2007, 11:17
par Invité
Bonjour à tous,

Je suis entrain de créer un générateur de formulaires et j'ai un pb particulier pour les listes déroulantes.
Mon utilisateur clique sur "nouvelle liste déroulante" pour faire apparaitre une liste de champs à remplir (nom de la liste, paramètres divers...).

Pour chaque liste créée, il y a un bouton "gestion des valeurs". En cliquant dessus, on ouvre un popup. Ce popup permet d'ajouter des valeurs dans un select multiple.

Mon pb: au moment ou le popup souvre, la nouvelle liste n'est pas encore enregistrée sur le serveur. (L'utilisateur n'a pas encore cliqué sur sauvegarder, car il est toujours entrain de créer la liste).

=> Comment faire pour transférer les valeurs saisies dans le popup, vers la fenêtre parente, afin qu'elles soient associées à la bonne liste déroulante?

Au départ, j'avais prévu de stocker les valeurs saisies (dans le popup) dans un input hidden : quand on clique sur "sauver les valeurs", j'utilise javascript pour transférer les valeurs du sélect multiple (popup) vers le input hidden se trouvant dans la fenêtre parente, après un toString() sur l'array e valeurs.

Le formulaire de création de la liste déroulante sauvegarde ensuite le tout avec du php.
Le souci, c'est que je viens de voir dans un manuel que input hidden ne supporte pas les événements javascript.

Est-ce que ça veut dire qu'on ne peut pas faire :
var MonInputHidden.value = New array ("valeur1", "valeur2", "valeur3");

Je n'ai pas de quoi tester ce mécanisme actuellement. Toutes vos suggestions sont les bien venues, y compris un moyen plus simple de réaliser cette création de valeurs pour une liste déroulante.

En vous souhaitant de bonnes fêtes!

Posté : 24 déc. 2007, 11:35
par Calimero
Bonjour,

J'ai suivi l'explication de ton problème jusque là :
Le souci, c'est que je viens de voir dans un manuel que input hidden ne supporte pas les événements javascript.
Il doit y avoir une incompréhension de ta part sur ce point, car je vois mal en quoi ça peut te bloquer. Un input hidden est complètement passif, c'est juste une variable dans ton formulaire... Quel évènement voudrais-tu traiter dessus ? un onChange ?

Si c'est bien le cas, effectivement il te faudra penser ton code autrement et intervenir au niveau de la modification de la valeur de ce champ.

A noter que le champ hidden ne supporte peut-être pas les évènements (onClick, onFocus, onBlur) mais supporte tout de même parfaitement toute manipulation javascript que tu pourrais faire avec un input text équivalent ;-) (donc la lecture et l'affectation de valeur, sans aucun problème).

Posté : 24 déc. 2007, 11:38
par Invité
ok, merci pour ta réponse. J'ai effectivement confondu "appliquer un événement à hidden" et "manipuler hiden avec js".
Ce qui m'intéresse c'est de manipuler donc je devrais pas être bloqué selon tes dires.

Un autre pb: avec js, je sais récupérer UNE valeur de liste déroulante (celle qui est sélectionnée) , mais comment récupérer TOUTES les valeurs d'un select multiple, sélectionnées ou pas?

Posté : 24 déc. 2007, 11:51
par Calimero
Quelques pistes par ici : http://fr.selfhtml.org/javascript/objets/options.htm

Tu peux le faire en javascript en parcourant la propriété options de ton select, qui est un tableau.

Par contre si ta question concernait la récupération de tout ça en php, je ne vois que deux façons de le faire :

- En sélectionnant au préalable toutes les valeurs du select (ce qui dans ton cas n'est sans doute pas envisageable)
- En stockant les valeurs lues en javascript comme je te l'expliquais plus haut sous forme de chaîne, par exemple dans un input hidden, juste avant le submit() de ton formulaire (l'évènement onSubmit pourrait alors te dépanner).

En espérant que ça t'aide ;-) Joyeuses fêtes 8-)

Posté : 24 déc. 2007, 12:05
par Invité
J'ai créé la fonction suivante pour récup toutes les valeurs du select. Le select s'appelle Maliste . J'utilise toString pour préparer les données anvant de les mettre dans le input hidden:
function transListValues (val)
{
	var tab = val.toString();
	alert (tab);
}
J'appelle la fontion comme ceci:
<input type="submit" id="sauv" name="sauv" value="Sauvegarder" onClick="transListValues (document.forms[0].MaListe.options[]);"/> 
Aucune valeur retournée. C'est normal?

Posté : 24 déc. 2007, 12:44
par Calimero
Deux remarques :

1- Enlève les crochets après options ici :
<input type="submit" id="sauv" name="sauv" value="Sauvegarder" onClick="transListValues (document.forms[0].MaListe.options);"/> 
2- Préfère faire ce traitement dans un onSubmit sur le formulaire plutôt qu'un onclick sur le bouton submit.

Et retente :-)

Posté : 24 déc. 2007, 12:58
par Invité
super, ma fonction transListValues() me renvoie maintenant [object], ce qui me semble plus ou moins normal (j'attendais un tableau).
Dans la fonction, j'essaye mainenant d'accéder à une valeur du tableau en faisant:
//même fonction que plus haut, mais simplifiée:
function transListValues (val)
{
	alert (val[0]);
}

Posté : 24 déc. 2007, 13:00
par Invité
alert(val) me renvoir object, mais alert (val[0]) ne me renvoie pas la première valeur.
Comment afficher les valeurs de l'objet options?

Posté : 24 déc. 2007, 13:02
par Invité
ok, j'ai trouvé :
function transListValues (val)
{
   alert (val[0].value);
}
Merci bcp et joyeux noel!

Posté : 24 déc. 2007, 13:03
par Calimero
Noyez Joël :D

Posté : 24 déc. 2007, 13:08
par Truc
Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton Image qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)

Posté : 24 déc. 2007, 13:09
par Invité
heu, juste une petite précision:
je dois maintenant mettre ce tableau de valeurs dans le input hidden.

La valeur du input hidden peut elle directement contenir un tableau, ou faut-il traiter le tableau avant?

Mon souci est que la valeur du input doit pouvoir être comprise ensuite par php.
Je ne peux donc pas utiliser escape() pour convertir le tableau en chaine de caractères.

J'ai essayé toString() sur le tableau mais ça me renvoie [object] aulieu de "valeur1, valeur2, valeur3".
function transListValues (val)
{
	alert (val.toString());
}
Comment faire cela?

Posté : 24 déc. 2007, 13:17
par Truc
Je ne pas lu tout le schmilblick mais join() convient à ce que tu demandes dans le dernier message.

Posté : 25 déc. 2007, 12:21
par Invité
Bonjour,

join() ne fonctionne que sur les tableaux...ya til un moyen de convertir un objet en tableau?

Posté : 25 déc. 2007, 13:51
par momox
Tu peux utiliser le transtypage je crois en faisant la chose suivante:
$array = (array) $object;
A vérifier tout de même, je sais que l'inverse est possible en tout cas.
@++ ;)