Aide pour javascript

Fermé
lili - 18 mai 2005 à 09:51
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 20 mai 2005 à 17:17
Bonjour,

voila je dois améliorer une partie d'un site internet et j'ai du mal a comprendre comment fonctionne le code qui permet la creation de mon menu:

 function change_mode() 
        { 
         ind = document.menu.mode.selectedIndex; 
         if (document.menu.mode.options[ind].value == 'formulaire') 
         { if (document.menu.mode.options[ind].value == 'requete') 
         { 
          document.menu.objet.options.length = 0; 
          var o=new Option('intitulé1','1'); 
          document.menu.objet.options[document.menu.objet.options.length]=o; 
          var o=new Option('intitulé2','2'); 
document.menu.objet.options[document.menu.objet.options.length]=o; 
          document.menu.action.value = "rechercher"; 


Ce que je comprend pas c déja comment ca marche et en plus pourkoi mon intitulé 2 si il dépasse une certaine longueur empeche le bon fonctionnement de la fonction change_mode..

Merci d'avance
A voir également:

38 réponses

kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
18 mai 2005 à 10:07
Bonjours lili,

je ne vois pas trop ou est le pb dans ce que tu as donné, par contre je me pose qq question sur le besoin de mettre tes deux test if :

         ind = document.menu.mode.selectedIndex; 
         if (document.menu.mode.options[ind].value == 'formulaire') 
         { 
         if (document.menu.mode.options[ind].value == 'requete') 
         { 



La tu as deux test qui empeche d'entrer dans la suite du code car si ton
document.menu.mode.options[ind].value 
est égal à 'formulaire', il ne peut aps vérifier le deuxieme test en étant égal à 'requete'.

Ensuite, dans le code qui suit :
         document.menu.objet.options.length = 0; 
          var o=new Option('intitulé1','1'); 
          document.menu.objet.options[document.menu.objet.options.length]=o; 
          var o=new Option('intitulé2','2'); 
document.menu.objet.options[document.menu.objet.options.length]=o; 
          document.menu.action.value = "rechercher"; 


Quelle est l'utilité de mettre au meme endroit (
document.menu.objet.options[document.menu.objet.options.length]=o; 
) deux fois de suite une valeur différente, à savoir la premiere fois :

var o=new Option('intitulé1','1'); 

et la deuxieme fois :
var o=new Option('intitulé2','2'); 


Ou alors il faut écrire de cette facon en incrémentant la taille :
        document.menu.objet.options.length = 0; 
          var o=new Option('intitulé1','1'); 
          document.menu.objet.options[document.menu.objet.options.length++]=o; 
          var o=new Option('intitulé2','2'); 
document.menu.objet.options[document.menu.objet.options.length]=o; 
          document.menu.action.value = "rechercher"; 



Mais à mon avis pour la première remarque que j'ai fait, l'écécution du script ne passe pas à l'intérieur de tes deux if.

Tu n'a pas autre chose comme code, par exemple celui qui vient apres les deux 'if' justement.


++
0
En fait je me suis trompé, j'ai pas mis tout le code c pour ca que ce que j'ai donné est fo.

Après le if du formulaire ya le meme type de chose que après le if pour requete.

Moi cke je comprend pas c a quoi ca sert de mettre ca:

 document.menu.objet.options.length = 0; 
          var o=new Option('intitulé1','1'); 
          document.menu.objet.options[document.menu.objet.options.length++]=o; 
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
18 mai 2005 à 10:30
Ah... qu'est ce que j'ai écrit !! Autant pour moi je me suis tromé, suis allé trop vite, toute mes excuses.
Oui il faut oter le '++' dans la ligne.

Sinon, pour le reste.. je vois pas trop là. Tu peux mettre la suite du code que tu as dit stp.
0
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 7 748
18 mai 2005 à 10:27
document.menu.objet.options.length = 0;

Crée une liste d'option vide

var o=new Option('intitulé1','1');

Créé un objet option (un bouton radio) identifié par la chaine '1' et nommé 'intitulé1'

document.menu.objet.options[document.menu.objet.options.length++]=o;

Insère l'option crée dans le document, puis incrémente sa longueur (le ++) (normal, il y a une option de plus ;o))
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
18 mai 2005 à 10:45
La longueur n'est pas incrémentée automatiquement des fois non ?
J'avaismis ca sans trop réfléchir mais...
0
ok merci pour l'explication c dessuite plus clair.

Et sinon vous savez pas pourquoi lorsque j'écrit un intitulé trop long pour intitulé2 la concordance entre mes deux listes déroulantes ne se font plus.

Car j'ai 2 listes déroulantes:
1 coté avec formulaire et requete
l'autre coté avec les options correpsondantes.

Quèand je clique sur requete, les options qui y sont associés s'affiche dans l'autre liste

Mais si je rallonge la longuer de mon intitulé ben ce mecanisme ne fonctionne plus

?????
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
18 mai 2005 à 10:49
aucune idée, dsl

++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 7 748
18 mai 2005 à 14:54
Je ne comprends pas désolé ! Tu as une url vers le site que tu développes ?
0
Oui mais c un site sécurisé je peux donc pas donner l'adresse...

Sinon je vais essayer d'etre plus clair:

j'ai en guise de menu 2 listes déroulantes cote a cote.

La première contient :formulaire,requete,table

Si on selectionne dans la première liste requete le contenu de la deuxième liste change et apparait les options qui correpsondent a la requete.

On peut donc ensuite selectionner intitulé1,intitulé2...Etc

Donc mon problème est que : je me suis rendu compte que si je met un intitulé qui est trop long, lorsque je selectionne requete dans ma 1ere liste la 2emme reste avec les valeurs par defaut......
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
18 mai 2005 à 15:04
aahhh, je vois... mais c'est pas le code pour créer un menu comme tu le dit dans ton premier code, ce que tu veux c'est changer les valeurs de ta deuxieme liste quand tu selectionne une valeur dans la deuxieme en fait, c'est ca ?
0
Mais ca ji suis déja arriver sauf que ca bug justement quand je met un intitulé trop long.....

allez savoir pourkoi????
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
18 mai 2005 à 15:07
Tu le met ou l'intitulé ? A la place de 'intitulé1', 'intitulé2', ...

0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857 > kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013
18 mai 2005 à 15:09
Ben .. je comprend toujours pas pouurquoi il te fait ca.
0
sam3000 Messages postés 1225 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 13 juin 2005 144
18 mai 2005 à 16:20
quel message il donne lorsque ça "bug"
0
Aucun message mais le changement de ma deuxième liste ne s'effectue plus.
0
sam3000 Messages postés 1225 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 13 juin 2005 144
18 mai 2005 à 16:27
donne moi un exemple d'intitulé "trop long"
0
Ben du genre si j'écris:

"recherche d'un animal en fonction de son type de pelage."
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
18 mai 2005 à 16:49
en effet ca fait long pour une option...
0
sam3000 Messages postés 1225 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 13 juin 2005 144
18 mai 2005 à 16:57
regarde ce site si quelque chose peut te mettre sur la bonne voie c'est en anglais)

http://www.quirksmode.org/js/options.html
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
18 mai 2005 à 17:02
en effet c'est peut etre ca, il faut faire une remise à null avant de mettre la taille à 0, puis ajouter les éléments.
0
sam3000 Messages postés 1225 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 13 juin 2005 144
18 mai 2005 à 17:13
tu vois que je peut aider quand je veux (j'espére que ce que tu dis kij est vrai ;) ) sinon, j'aurais parlé trop vite LOL (alors ce café?)
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
18 mai 2005 à 17:14
Ben en tout cas, c'est ce que la page que tu as donné disais : lili a fait la même chose sauf la remise à null, donc je me disais que peut etre cela vient de la son bug !
0
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 7 748
19 mai 2005 à 09:00
Je ne sais pas si tu as fini par résoudre ton problème... Mais si ce n'est pas le cas, il y a moyen d'avoir ton code actuel et ton navigateur + sa version ?
0
Mon navigateur c konkeror 3.2.3 (du moins celui avec lequel je teste les changements de mon site.

Je travaille donc sur linux.

Mon code est le suivant:
<script language="Javascript"> 
        function change_mode() 
        { 
         ind = document.menu.mode.selectedIndex; 
         if (document.menu.mode.options[ind].value == 'formulaire') 
         { 
         document.menu.objet.options.length = 0; 
		var o=new Option('Nouvelle séquence','sequences');
		document.menu.objet.options[document.menu.objet.options.length]=o; 
		var o=new Option('Nouvel alignement','alignements');
		document.menu.objet.options[document.menu.objet.options.length]=o;
		var o=new Option('Nouveau type de sequence', 'types_sequences');
		document.menu.objet.options[document.menu.objet.options.length]=o; 
		var o=new Option('Nouveau primer','primers');
		document.menu.objet.options[document.menu.objet.options.length]=o; 
		var o=new Option('Nouvelle analyse','resultats_analyses');
		document.menu.objet.options[document.menu.objet.options.length]=o; 
		var o=new Option('Nouveau type d\'analyse','types_analyses');
		document.menu.objet.options[document.menu.objet.options.length]=o;
		var o=new Option('Nouvel organisme','individus');
		document.menu.objet.options[document.menu.objet.options.length]=o;
		var o=new Option('Nouveau tissu','tissus');
		document.menu.objet.options[document.menu.objet.options.length]=o;
		document.menu.action.value = "ajouter";
	
         } 
         if (document.menu.mode.options[ind].value == 'table') 
         {
          document.menu.objet.options.length = 0; 
          var o=new Option('Les séquences','sequences'); 
          document.menu.objet.options[document.menu.objet.options.length]=o; 
          var o=new Option('Les alignements','alignements'); 
          document.menu.objet.options[document.menu.objet.options.length]=o; 
          var o=new Option('Les résultats d alignements','resultats_alignements'); 
          document.menu.objet.options[document.menu.objet.options.length]=o; 
          var o=new Option('Les differents types de sequences','types_sequences'); 
          document.menu.objet.options[document.menu.objet.options.length]=o; 
          var o=new Option('Les primers','primers'); 
          document.menu.objet.options[document.menu.objet.options.length]=o; 
          var o=new Option('Les résultats d analyses','resultats_analyses'); 
          document.menu.objet.options[document.menu.objet.options.length]=o; 
          var o=new Option('Les differents types d analyses','types_analyses'); 
	    document.menu.objet.options[document.menu.objet.options.length]=o; 
          var o=new Option('Les organismes repertoriés','individus'); 
	  document.menu.objet.options[document.menu.objet.options.length]=o; 
          var o=new Option('Les differents tissus de prélèvement','tissus'); 
          document.menu.objet.options[document.menu.objet.options.length]=o; 
          document.menu.action.value = "visualiser"; 
         } 
         if (document.menu.mode.options[ind].value == 'requete') 
         { 
          document.menu.objet.options.length = 0; 
          var o=new Option('Analyses faites pour un gène donné','ana_gene'); 
          document.menu.objet.options[document.menu.objet.options.length]=o; 
          var o=new Option('Primer utilisé','pri_type'); 
          document.menu.objet.options[document.menu.objet.options.length]=o; 
          var o=new Option('.....2','ana_pri'); 
          document.menu.objet.options[document.menu.objet.options.length]=o; 
          var o=new Option('....3','ana_per'); 
          document.menu.objet.options[document.menu.objet.options.length]=o; 
          var o=new Option('...4','ana_tech'); 
          document.menu.objet.options[document.menu.objet.options.length]=o; 
          var o=new Option('..5','pri_ana'); 
          document.menu.objet.options[document.menu.objet.options.length]=o; 
          document.menu.action.value = "rechercher"; 
         } 
         return; 
        } 
</script> 
 
<div align="center"> 
  <table width="100%" border="0"> 
    <tr> 
      <td width="30%"> 
      </td> 
      <td width="40%"> 
        <div align="center"> 
          <p align="center"><b><u><font face="Comic Sans MS" size="5" color="#3366CC">TITRE</font></u></b></p> 
        </div> 
      </td> 
      <td width="30%"> 
        <div align="center"> 
 
        </div> 
      </td> 
    </tr> 
    </table> 
     <hr> 
            <form method="post" objet="<? echo $PHP_SELF; ?>" name="menu" enctype=multipart/form-data> 
            <div align="center"><font size="2"><i><font size="2"><b>Menu déroulant</b></font><b><font size="2">::</font></b><font size="2"> 
            sélectionnez ce que vous désirez faire:</font></i></font></div> 
            <select name="mode" onChange="change_mode();"> 
              <option value="formulaire" selected>Formulaires</option> 
              <option value="table">Tables</option> 
              <option value="requete">Requêtes</option> 
            </select> 
            <select name="objet"> 
             <option value="sequences">Nouvelle séquence</option>
              <option value="alignements">Nouvel alignement</option>
              <option value="primers">Nouveau Primer</option>
              <option value="resultats_analyses">Nouvelle analyse</option>
              <option value="types_sequences">Nouveau type de sequence</option>
              <option value="types_analyses">Nouveau type d'analyse</option>
	      <option value="individus">Nouvel organisme</option>
	      <option value="tissus">Nouveau tissu</option>
            </select> 
            <INPUT type="hidden" name ="action" value="ajouter"> 
            <INPUT type="hidden" name="num_enr" value=""> 
            <input type="submit" name="Submit" value="OK"> 
            </form> 
    <hr>
</div> 


la ou il y a des ...... c la ou lorsque je met mon texte ca ne fonctionne pas.

Et encore une petite bizarri l'intitulé "analyse faites pour un gène donné" lui peut avoir n'importe quelle taille ca amrche quand meme........

Si vous pouvez m'aider c avec grand plaisir
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
19 mai 2005 à 10:13
Et si tu met ta fonction javascript entre les balise HEAD de ta page ? Ca marche pas mieux ? (Ne sais-t-on jamais...)
0
ben écoute ca marche

alors je n'ai qu'une chose a dire......................;merci

Et juste une dernière pitite question.

J'aimerai que lle menu reste sur le dernier choix effectué (car la il revient toujours au truc par default).

Si ya une iddée qui traine par la je suis preneur
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
19 mai 2005 à 10:51
A quel niveau ? Celui du mode ?
0
ben que lorsque on selectionne requete et une certaine option que cela reste dessus au lieu qu'une fois la page chargée ca revienne sur formulaire
0
sam3000 Messages postés 1225 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 13 juin 2005 144
19 mai 2005 à 11:11
(du parametrage quoi!) tu as besoin d'une option à parsser en parametre (get ou post) à travers PHP
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
19 mai 2005 à 11:19
Comme dit Sam, il faut que tu récupère les valeur selectionnée de ton formulaire par la méthose POST comme ci :

if(isset($_POST['bidule']))
   $bidule = $_POST['bifule'];
else
  $bidule = "";


Et regarde dans les propriété des SELECT, tu as une propriété pour mettre une valeur par défaut à ta liste déroulante. Come ca tu met la valeur récupérée dans $bidule.
0
Désolé d'insister mais je peux avoir un peut plus d'explication....je passe koi en parametrage et comment????
0