Ajout d'un champ texte auto

[Résolu]
Signaler
Messages postés
116
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
10 mars 2009
-
Messages postés
116
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
10 mars 2009
-
Error convertoring HTML to XHTML: System.ArgumentException: Invalid name character in 'php

19 réponses

Messages postés
116
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
10 mars 2009

ok grace à tes infos j'ai reussi à le faire fonctionner.

function choix(id){
  for(i=1; i<=3; i++) {
    document.getElementById("champ"+i).style.display = (id.options[id.selectedIndex].value=="valeur"+i) ? 'block' : 'none'; 
  }
}


Voila du coup si j'ai bcp de select avec son champ caché, je simplifie beaucoup mon javascript.
Messages postés
116
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
10 mars 2009

Error convertoring HTML to XHTML: System.ArgumentException: Invalid name character in 'php
Messages postés
116
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
10 mars 2009

Hum désole pour les 1er post, je viens de passer sous ie se sera plus simple lol.
je reprend donc lol:

J'aimerai ajouter automatiquement un champ texte par rapport au choix d'une liste déroulante,
mais je n'arrive pas à récuperer le nom de mon champ dans le code javascript.
[code
 function choix(id){
   for(i=1; i<=3; i++) {
     champ+i.style.display =(id.options[id.selectedIndex].value=="valeur1") ? 'block' : 'none';
  }
}
/code

Petite précision, le champ texte est crée de la sorte:
 
<?php
for($i=1; $i<=3; $i++) {
  echo '
 La zone '.$i.' : 
'; }
?>
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
Bonjour,

>>J'aimerai ajouter automatiquement un champ texte par rapport au choix d'une liste déroulante,
pas tout compris alors !
car :
for(i=1; i<=3; i++) {     champ+i.style.display 
...
ça ne ferait que jouer avec l'affichage d'on ne sait quoi d'ailleurs !

>>...echo '

>>      La zone '.$i.' :
';....
concrètement ça donne :

La zone 1 :

La zone 2 :

La zone 3 :

donc tu peux adresser les div ( document.getElementById("champ1" ou "champ2" ou "champ3") )
mais pas les input texte ( pas d'id, ou pas de name + pas dans un form ! ), enfin, pas simplement

Cordialement [mon Site] [M'écrire] Bul
Messages postés
116
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
10 mars 2009

Le code fonctionne bien avec:
function choix(id){
  champ1.style.display = (id.options[id.selectedIndex].value=="valeur1") ? 'block' : 'none'; 
  champ2.style.display = (id.options[id.selectedIndex].value=="valeur2") ? 'block' : 'none'; 
  champ3.style.display = (id.options[id.selectedIndex].value=="valeur3") ? 'block' : 'none'; 
}

et en html:
<select onChange="choix(this);">
<option></option>
<option value="valeur1">valeur1</option>
<option value="valeur2">valeur2</option>
<option value="valeur3">valeur3</option>
</select>



 La 1ere zone : 

 La 2eme zone : 

 La 3eme zone : 



J'aimerai juste simplifier le tout sous forme de tableau, il faut juste que j'arrive a récupérer le nom de l'id de la div avec son numero.
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
Bonjour,
>>j'aimerai juste simplifier le tout sous forme de tableau,
pas compris
un tableau de quoi ?

>>il faut juste
que j'arrive a récupérer le nom de l'id de la div avec son numero.
ça non plus....
quand ?
au onchange, tu as id.selectedIndex qui donne le n° de l'option sélectionnée
tu peux donc en tirer document.getElementById("champ"+(id.selectedIndex))
mais pas sûr de répondre !

Cordialement [mon Site] [M'écrire] Bul
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
ah... c'était cela ?
j'étais loin de voir ton souci !

m'enfin, ch'tiote remarque :

>> for(i=1; i<=3; i++) {
perso, je ferais un while

var i=1;
while ( document.getElementById("champ"+i) )
{ traitement de document.getElementById("champ"+i)
  i++
}
comme ça c'est indépendant du html
ça fonctionne quel que soit le nombre de div
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
et... en fait.. plutôt qu'une boucle
je mémoriserais le dernier div affiché
que je cacherais avant d'afficher celui nécessaire
ce qui évite toutes boucles
Messages postés
116
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
10 mars 2009

Oui c'est vrai ca pourrait me simplifier pour le futur.
Petite remarque, du moment que l'on mets un onChange="fonction()" dans un select, il va demarrer la fonction à chaque fois que l'on change l'option du select non?

du coup on ne peut pas faire quelque chose du genre:
function choix(){
  for(i=0; i<5; i++) {
    if(document.getElementById("select"+i).value=="option") {
     document.getElementById("champ"+i).style.display = 'block';
   }
  }
}


Avec bien sur un id dans la div où est situé le select.
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
je te disais :
au onchange, tu as id.selectedIndex qui donne le n° de l'option sélectionnée
tu peux donc en tirer document.getElementById("champ"+(id.selectedIndex))
ça ne convient pas ?
Messages postés
116
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
10 mars 2009

Ben si tu veux, j'ai un formaulaire pour un bon de commande, a la fin il est constitué de la quantité et couleur de l'objet.
Sauf que pour la couleur, j'ai pour chaque ligne un menu deroulant et si je mets la derniere option de ce menu deroulant, je veux faire apparitre un champ text pour que la personne puisse mettre son propre code couleur.

Mes ligne de bon de commande sont donc génrées par du php et un FOR.
Mais du coup si je prend la fonction que j'avais un peu avant avec le document.getElementById("champ"+(id.selectedIndex)) il me crée le champ texte pour toute mes ligne.

J'ai donc voulu essayer de récuperer la valeur du select par id de la div, et si la valeur est la dernier (cà a dire = "option") alors le change le display du champ texte.
Messages postés
116
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
10 mars 2009

Tu vois se que je veux dire?
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
ah... le dernier n° ?
id.length c'est le nombre de postes
Messages postés
116
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
10 mars 2009

Hum c'est à dire le nombre de postes??

Par dernier numero je veux dire derniere option menu deroulant qui à comme valeur "option".
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
id.length = le nombre d'<option>
si tu préfères
Messages postés
116
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
10 mars 2009

Je sais pas si le id.length va me servir.
Tien regarde je te laisse le lien vers le formulaire en question http://www.sensitivity.com/francais/commande.php pour que tu comprennes mieu le fonctionnement.

La sur le formulaire ma fonction est la suivante:

function choix(id){
  for(i=0; i<5; i++) {
    document.getElementById("champ"+i).style.display = (id.options[id.selectedIndex].value=="option"+i) ? 'block' : 'none'; 
  }
}


Et comme tu peux le constater, lorsqu'on mets option dans le choix de la couleur, il rajoute bien le champ dessous pour que l'on puisse rentrer un code RAL sois même.
Mais si l'on fait le meme choix sur une ligne dessous, le 1er champ ouvert va se remettre en display:none....
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
navré...
je ne comprend pas ce que tu veux faire ????

ça me semble normal que tu le caches :
c'est ce que tu fais !

tu ne peux pas expliquer le but.... simplement ?
et mettre l'extrait nécessaire, et pas plus ?
@+
Messages postés
116
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
10 mars 2009

Le but est que le client peux passé commande de radiateur en fonte avec comme choix de couleur:
- les couleurs du menu déroulant
-ou si il mets option dans le menu éroulant, il peut rentrer lui même un code couleur dans le champ qui apparait.

Il est indispensable de laisser le champ texte si le menu déroulant qui appartien à ca ligne est sur option.

Chaque ligne est indépendante.
Messages postés
116
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
10 mars 2009

C'est un peu plus clair?

En fait quand je vais valider mon formulaire, je vais creer un PDF
sous forme d'un bon de commande avec une entête etc.

et je vais retrouver chaque ligne du choix de nombre de radiateurs etc.. dans un tableau avec le prix pour chaque ligne.