Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3784 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Select et javascript

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Select et javascript

n°1352685
masseur
Posté le 24-04-2006 à 14:13:52  profilanswer
 

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

mood
Publicité
Posté le 24-04-2006 à 14:13:52  profilanswer
 

n°1352715
thierryR
J'aime les bretzels
Posté le 24-04-2006 à 14:47:32  profilanswer
 

Et en utilisant <form> ça donne quoi ?

n°1352725
masseur
Posté le 24-04-2006 à 14:57:44  profilanswer
 

Le tout est encadré par un FORM bien evidemment.

n°1352730
thierryR
J'aime les bretzels
Posté le 24-04-2006 à 15:01:11  profilanswer
 

#
<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>

n°1352732
toufik51
c'est pour les stocopies...
Posté le 24-04-2006 à 15:02:06  profilanswer
 

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
n°1352749
toufik51
c'est pour les stocopies...
Posté le 24-04-2006 à 15:11:44  profilanswer
 

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
 
++

n°1352750
masseur
Posté le 24-04-2006 à 15:12:33  profilanswer
 

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

n°1352776
toufik51
c'est pour les stocopies...
Posté le 24-04-2006 à 15:31:09  profilanswer
 

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

n°1352788
masseur
Posté le 24-04-2006 à 15:37:28  profilanswer
 

EN pv c'est envoyé ^^

n°1352825
toufik51
c'est pour les stocopies...
Posté le 24-04-2006 à 16:13:45  profilanswer
 

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  :)

mood
Publicité
Posté le 24-04-2006 à 16:13:45  profilanswer
 

n°1352838
masseur
Posté le 24-04-2006 à 16:26:32  profilanswer
 

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
 

n°1352871
toufik51
c'est pour les stocopies...
Posté le 24-04-2006 à 16:55:57  profilanswer
 

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é.

n°1352883
masseur
Posté le 24-04-2006 à 17:08:21  profilanswer
 

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
n°1352894
toufik51
c'est pour les stocopies...
Posté le 24-04-2006 à 17:15:07  profilanswer
 

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)

n°1352895
masseur
Posté le 24-04-2006 à 17:17:08  profilanswer
 

C'est très gentil.
MErci beaucoup.

n°1352906
masseur
Posté le 24-04-2006 à 17:26:41  profilanswer
 

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!!!

n°1353208
toufik51
c'est pour les stocopies...
Posté le 24-04-2006 à 23:28:19  profilanswer
 

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

n°1354355
toufik51
c'est pour les stocopies...
Posté le 26-04-2006 à 14:32:35  profilanswer
 

alors ? des news ?

n°1358594
josserand_​joss
Posté le 03-05-2006 à 13:28:55  profilanswer
 

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  :)

n°1358747
Doctor46
Posté le 03-05-2006 à 15:53:14  profilanswer
 

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.

n°1358803
josserand_​joss
Posté le 03-05-2006 à 16:23:39  profilanswer
 

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.

n°1358808
josserand_​joss
Posté le 03-05-2006 à 16:27:45  profilanswer
 

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 ! :-)

n°1358829
josserand_​joss
Posté le 03-05-2006 à 16:37:38  profilanswer
 

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 !!

n°1359052
gatsu35
Blablaté par Harko
Posté le 03-05-2006 à 22:01:32  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Select et javascript

 

Sujets relatifs
[HTML/CSS/Javascript] Select et onchange[Javascript] valeur d'un select sous IE
[Javascript] Récupération de la valeur d'un selectjavascript et plusieurs select
Javascript et options d'un select...[Javascript]Recuperer la valeur de l'élément selectionner d'un select
[Javascript] Modifier dynamiquement un href depuis un select[javascript] pb avec une liste select
[Javascript] disabled/enabled une liste déroulante (balise SELECT)[Javascript probable] Refresh automatique sur select
Plus de sujets relatifs à : Select et javascript


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR