Select et javascript

Select et javascript - HTML/CSS - Programmation

Marsh Posté le 24-04-2006 à 14:13:52    

Bonjour.
Je possède dans mon formulaire deux input que j'aimerai rendre dépendant.
En effet le choix du premier input entrenerai des choix différents pour le second input.
 
Pour cela j'ai eu comme idée de faire ceci.
 
 

Code :
  1. <td ><select name="info_projet" onChange="recup()">
  2. <?php
  3. require('config.php');
  4. $query="SELECT code,id_projet FROM `projet` WHERE `id_projet` IS NOT NULL AND `validite` = '0'";
  5. $result = mysql_query($query) or die(mysql_error());
  6. while ($val = mysql_fetch_assoc($result)) {
  7. ?>
  8. <option value="<?php echo $val['id_projet'],'@',$val['code'];?>"><?php echo $val['code'];?></option>
  9. <?php
  10. }
  11. ?>
  12. </select>
  13. </td>


Code :
  1. <script language="Javascript">
  2. function recup()
  3. {
  4. status=document.formulaire.info_projet.value;
  5. }
  6. </script>


J'ai une erreur me disant que document.formulaire.info_projet.value est NULL ou n'est pas un objet.
 
Quelqu'un a une idée?
 
Ou sinon si vous avez des solutions pour rendre deux input dépendants l'un de l'autre sans valider le formulaire je suis preneur.
 
Cordialement

Reply

Marsh Posté le 24-04-2006 à 14:13:52   

Reply

Marsh Posté le 24-04-2006 à 14:47:32    

Et en utilisant <form> ça donne quoi ?

Reply

Marsh Posté le 24-04-2006 à 14:57:44    

Le tout est encadré par un FORM bien evidemment.

Reply

Marsh Posté le 24-04-2006 à 15:01:11    

#
<option value="<?php echo $val['id_projet'],'@',$val['code'];?>"><?php echo $val['code'];?></option>
#
essaye ça:
<option value="<?php echo $val->id_projet,'@',$val->code;?>"><?php echo $val->code;?></option>

Reply

Marsh Posté le 24-04-2006 à 15:02:06    

salut,
En fait, ton champ SELECT n'est pas accessible comme un champ TEXT classique.
Il faut que tu fasses  

Code :
  1. var f=document.formulaire

pour déclarer ma variable f
 

Code :
  1. f.info_projet.options[f.info_projet.selectedIndex].value


pour accéder à la valeur de ton champ. Il sélectionne l'option sélectionnée et prend la value. Pour ton code, ça devait marcher sous IE mais pas sous Netscape/Firefox
 
A+


Message édité par toufik51 le 24-04-2006 à 15:03:12
Reply

Marsh Posté le 24-04-2006 à 15:11:44    

Citation :

Ou sinon si vous avez des solutions pour rendre deux input dépendants l'un de l'autre sans valider le formulaire je suis preneur.


Si je comprends bien ta phrase, tu as 2 solutions :
1 - Si tu veux tout faire sans rechargement de page, tu crées des tableaux javascript à 2 dimensions avec la première qui est défini par l'id de ton premier champ select. Du coup, le deuxième select charge tous les éléments du tableau avec la première dimension fixe. Utiliser un onChange sur le premier select.
2 - Si tu peux recharger la page, tu peux faire comme sur le site de http://www.auto-ies.com/ (c'est un exemple que j'ai sous la main, j'ai pas de part  :D ), cad qu'au choix dans la première combo, tu recharges ta page avec un paramètre dans l'url, et dans ta page tu te serviras de ce paramètre pour remplir ta deuxième combo.
 
Dis moi quelle solution te branche le plus, si tu as besoin d'exemple, je t'en ferai un petit
 
++

Reply

Marsh Posté le 24-04-2006 à 15:12:33    

Merci des réponses, mais ca me fait toujours la même erreur !!!!

Reply

Marsh Posté le 24-04-2006 à 15:31:09    

tu peux mettre le source de ta page (ou si tu as une URL de test, c'est encore mieux)

Reply

Marsh Posté le 24-04-2006 à 15:37:28    

EN pv c'est envoyé ^^

Reply

Marsh Posté le 24-04-2006 à 16:13:45    

Alors quelques boulettes dans ton source :
 
1 - Tu déclares plusieurs fois le formulaire nommé "formulaire". Tu dois le faire dans un while PHP. En fait, il faut ouvrir la balise form avant la boucle PHP et la fermer après. Du coup, fais gaffe aux variables que tu mets dedans. Moi ce que je fais, c'est que j'utilise un compteur dans ma boucle et je mets un suffixe à mes noms de variable avec ce compteur. Après, il faut magouiller les fonctions avec des eval en JS pour accéder à tes variables. Sinon, tu peux créer X formulaires, mais avec des noms différents.
 
2 - ta fonction recup() n'est pas bonne, voilà un exemple de ce que tu devrais mettre

Code :
  1. function recup()
  2. {
  3. var f = document.formulaire;
  4. status = f.info_projet[f.info_projet.selectedIndex].value;
  5. }


 
Voilà pour le moment les points à corriger. Cependant, et très généralement d'après ma faible expérience, la correction du point 1 amène son lot d'ennuis  :whistle:  Mais bon, rien d'insurmontable, ne t'inquiète pas  :)

Reply

Marsh Posté le 24-04-2006 à 16:13:45   

Reply

Marsh Posté le 24-04-2006 à 16:26:32    

En fait je suis obligé de faire plusieurs formulaires, vu comment mon application est architecturée.
 
Cependant je prends en compte ta remarque comme quoi il faut appeler chaque formulaire avec un nom différent.
 
ET donc dans ma fonction recup comment faire pour que cela s'applique a tout les formulairesXX si je les appelent formulaire00 formulaire 01 car je vais pas créer autant de fonction qu'il y a de form.
 
Merci et je pense qu'après cette réponse tout devrait marcher
 

Reply

Marsh Posté le 24-04-2006 à 16:55:57    

Désolé pour la réponse tardive, je m'étais absenté du bureau.
En fait, ta fonction recup() va prendre en compte un argument qui est le nombre de formulaires (le nombre de demi-journées affichées dans ton cas).
En gros, tu auras quelque chose comme ça :

Code :
  1. function recup(nb)
  2. {
  3.    for (var i=0; i<nb; i++)
  4.    {
  5.       ....
  6.    }
  7. }


avec la notion de eval à prendre en compte (en gros, tu voudras accéder dans ton for à formulairei, donc tu veux évaluer i mais pas formulaire)
Je te laisse réfléchir à tout ça. N'hésite pas si tu es bloqué.

Reply

Marsh Posté le 24-04-2006 à 17:08:21    

En fait j'y connais rien en java.
COmment fait on pour ecrire formulaire suivi du numéro de la variable i?
genre en php formulaire<?php echo $i;?>
 
Merci


Message édité par masseur le 24-04-2006 à 17:09:39
Reply

Marsh Posté le 24-04-2006 à 17:15:07    

Justement, c'est là que eval rentre en ligne de compte.
eval te sert à faire une pré interprétation de code JS, ou plutot une double interprétation du code. Par exemple, dans ton cas, tu veux que formulaire ne soit pas interprété, mais i oui. Et après tu veux que formulaire3 soit aussi interprété.
Donc tu utilises Eval, avec, je te le fais vite fait, je dois partir :

Code :
  1. var f = eval('document.formulaire'+i);


et après tu utilises f de partout dans ton for, ça sera ton formulaire courant (tu peux réutiliser le status = f.info_projet[f.info_projet.selectedIndex].value; indiqué plus haut)
 
Si d'autres questions, je te réponds demain (voire ce soir avec un peu de chance)

Reply

Marsh Posté le 24-04-2006 à 17:17:08    

C'est très gentil.
MErci beaucoup.

Reply

Marsh Posté le 24-04-2006 à 17:26:41    

Je viens de tester et si je fais sous forme de boucle ca me renvoie comme réponse toujours la première valeur alors que si j'enleve la boucle et que j'écris à la main par exemple  

Code :
  1. function recup()
  2. {
  3. var f = document.formulaire4;
  4. status = f.info_projet[f.info_projet.selectedIndex].value;
  5. }

 
et ben cete ligne affiche bien l'element cliqué étrange!!!

Reply

Marsh Posté le 24-04-2006 à 23:28:19    

C'est parce qu'il faut que tu fasses :
 
function recup(nb)
{
   eval('var f = document.formulaire'+nb);
   status = f.info_projet[f.info_projet.selectedIndex].value;
}
 
Et à l'appel de ta fonction dans tes boucles PHP, n'oublie pas de renseigner le nb, avec ta variable PHP $ligne.
 
Et là, ça doit passer. Sinon, la nuit porte conseil, je serai plus utile demain

Reply

Marsh Posté le 26-04-2006 à 14:32:35    

alors ? des news ?

Reply

Marsh Posté le 03-05-2006 à 13:28:55    

Bonjour à  tous,

 

Je viens de tomber sur le sujet.
Je rencontre un problème similaire.

 

Je souhaite récupérer la valeur d'un select (ou plutôt de l'option sélectionnée) pour effectuer des tests derrière.

 

Donc, ça marche niquel sous FireFox, mais rien (blanc) sous IE.
Voilà ce que j'ai testé jusque là :

 
Code :
  1. alert(formulaire.monSelect.value);
  2. alert(formulaire.monSelect.options[formulaire.monSelect.selectedIndex].value);
  3. alert(formulaire.monSelect[formulaire.monSelect.selectedIndex].value);
  4. alert(formulaire.monSelect[3].value);


--formulaire est appelé par un this.form dans le HTML, ça c'est ok : vérifié par un alert(formulaire.monSelect);--

 

Les 4 lignes m'affichent un message avec une valeur sous FireFox, et vide sous IE.

 

Quelqu'un a-t-il trouvé la soluce ? Est-ce le .value qui ne plaît pas à IE ?
Merci  :)

Reply

Marsh Posté le 03-05-2006 à 15:53:14    

J'utilise cette fonction pour récupérer les valeurs des boutons radio, mais ça marche aussi avec les select.

Code :
  1. function getValRadio(obj) {
  2.   for (i=0;i<obj.length;i++)
  3.       if (obj[i].checked)
  4.         return obj[i].value;
  5.   return "(Non renseigné)";
  6. }


J'avais cherché pour récupérer directement la valeur, mais apparemment ça ne serait pas possible de le faire directement sous IE.

Reply

Marsh Posté le 03-05-2006 à 16:23:39    

Non, bah c'est toujours le même problème.
 
Pourtant, quand j'affiche formulaire.monSelect[3], il me précise bien que c'est un HTMLOptionElement. Et un des paramètres de ce genre d'objet est bien "value"... Je ne comprends pas.

Reply

Marsh Posté le 03-05-2006 à 16:27:45    

Ok c'est bon, j'ai trouvé !!!!
 
formulaire.tableWhere[formulaire.tableWhere.selectedIndex].text
 
J'ai donc utilisé le paramètre "text" et non "value". Là, c'est compatible avec FireFox et IE !!!
Tout simplement ! :-)

Reply

Marsh Posté le 03-05-2006 à 16:37:38    

Encore mieux : j'avais oublié de mettre un value dans mes balises <option>... Et comme FireFox est très gentil, il me faisait croire que j'avais bon !
Donc, ne pas oublié le <option value="...">.
Et du coup, là, IE fait comme Firefox.
 
Merci quand même !!

Reply

Marsh Posté le 03-05-2006 à 22:01:32    

Welcome In Lego World, the World where we use javascript like lego bricks

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed