Partage
  • Partager sur Facebook
  • Partager sur Twitter

utilisation de script js plusieurs fois dans une même page

    8 juillet 2010 à 18:59:52

    Bonjour tout le monde,

    j'ai un soucis avec javascript;
    j'aimerai afficher autant de fois que l'utilisateur le veut certains champs. J'ai donc creer des objet avec des onchange pour les faire apparaître.
    Seulement, quand j'arrive au dernier onchange et qu'il renvoie au 1er, toutes les autres listes s'effacent pour revenir au même point qu'au depart.
    Je me suis dis que c'etait peu être un problème de nom de champs que j'ai voulu corriger en concatenant un chiffre à la fin du nom du champs. Mais la variable revient également à 0...
    Je vous mets le code pour plus de compréhension.

    <?php
    echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
    ?>
    <html  xml:lang="fr" >
    <head>
    <script type="text/javascript" src="./arrayPHP2JS.js" charset="iso_8859-1"></script>
    <script type="text/javascript" src="./changeValeur.js" charset="iso_8859-1"></script>
    <script type="text/javascript" src="./operateur.js" charset="iso_8859-1"></script>
    <script type="text/javascript" src="./appChamps.js" charset="iso_8859-1"></script>
      
    	<title> Base de données ARECOFA </title>
    	</title>
    	<br/><br/><u><font size=+50 color=seagreen> <center> Test : </center></font></u>
    	<br/><br/><br/><br/>
    	<?php
    	$link=mysql_connect("localhost", "root", "") OR die('Erreur de connexion');
    	mysql_select_db("arecofa");
    	$req=mysql_query("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='produit' or TABLE_NAME='fabricant'") or die ("requete impossible");
    	$champs=array();
    	while ($row = mysql_fetch_array($req))
    		{//echo "colonne : $row[0] <br/>";
    		if ($row[0] != "num_fabricant" and $row[0] != "num_de_produit" and $row[0] != "photo" and $row[0] != "adresse" and $row[0] != "description")
    			{$recherche=mysql_query("select distinct $row[0] from produit, fabricant ");
    			$id = 0;
    			$temoin_t=0;
    			//echo "champs : <br/>";
    			while($ligne = mysql_fetch_assoc($recherche))
    				{$p = $row[0];
    				$v = $ligne[$row[0]];
    				if ($temoin_t==0)
    					{$champs[$p]=array();
    					$champs[$p][1] = array();
    					$champs[$p][2] = array();
    					$temoin_t=1;
    					}
    				$champs[$p][1][$id] = $v;
    				$champs[$p][2][$id] = $ligne[$row[0]];
    				$id++;
    				}
    			}
    		else
    			{if($row[0] == "adresse" or $row[0] == "description")
    				{$p = $row[0];
    				$champs[$p] = array();
    				$champs[$p][1] = array();
    				$champs[$p][2] = array();
    				$champs[$p][1][0] = "";
    				$champs[$p][2][0] = "";
    				}
    			}
    		}
    		$chaine = htmlspecialchars(serialize($champs), ENT_QUOTES);
    		?>
    		<script type="text/javascript">
    		/* <![CDATA[ */
    		<!--
    		/*
    		* Ici, on transmets la chaîne sérialisée à JavaScript 
    		* pour la transformer en tableau indexé JavaScript 
    		*/
    		var tableau = new PhpArray2Js('<?php echo $chaine; ?>');
    		var tab = tableau.retour();
    		var k =0;
    		// -->
    		/* ]]> */
    		</script>
    	</head>
    	<body style="background:lightgreen" link=darkgreen vlink=green>
    		<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgprod">
    		<legend>Sélectionnez un champs puis une condition et une valeur </legend>
    		<select name="champs0" id="champs0" onchange="changeValeur(tab,this.value,k);">
    		  <option value="vide">- - - Choisissez un champs - - -</option>
    			<?php
    			/* Construction de la première liste : on se sert du tableau PHP */
    			$nbr = count($champs);
    			foreach($champs as $nr => $nom)
    				{$ch = "$nr"."0";
    				?>
    				<option value="<?php echo($ch); ?>"><?php echo($nr); ?></option>
    				<?php
    				}
    			?>
    		</select>
    		
    	  <span id="blocValeur"></span>
    	 
    	  
    	  <br/><br/>
    	  <input type="submit" name="ok" id="ok" value="Envoyer" />
    		</form>
    	</body>
    </html>
    


    fichiers javascript :

    /* On crée la fonction qui va construire la seconde liste déroulante */
    function changeValeur(tab, champs_reg, k)
    	{var reg = /^[a-zA-Z]+/;
    	var champs = reg.exec(champs_reg);
    	if(champs != "vide" && champs != "description" && champs != "adresse")
    		{var nbd = tab[champs][1].length;
    		form_d += '<select name="condition" id="condition" > <option value="vide">- - - Choisissez une condition - - -</option> <option value="egal">égal</option> <option value="sup">supérieur à </option> <option value="inf">inférieur à</option> <option value="sup_eg">supérieur ou égal à</option> <option value="inf_eg">inférieur ou égal à</option> <option value="plus_gd"> le plus grand </option> <option value="plus_petit">le plus petit</option> </select> ';
    		form_d  += '<select name="valeur" id="nom_valeur" onchange="operateur(tab, this.value,k);">';
    		form_d  += '<option value="vide">- - - Choisissez une valeur - - -</option>';
    		for(var j = 0;  j < nbd; j++)
    			{if (tab[champs][1][j] != undefined)
    				{form_d += '  <option value="'+ tab[champs][1][j] +k+'">'+ tab[champs][2][j] +'<\/option>';
    				}
    			}
    		form_d += '<\/select>';
    		}
        else
        {if(champs == "adresse" || champs == "description")
    		{var form_d = '<select name="condition" id="condition" > <option value="vide">- - - Choisissez une condition - - -</option> <option value="contient">contient</option> <option value="contient_pas"> ne contient pas </option> </select> ';
    		form_d  += '<input type="text" name = "'+ champs +k+'" value = "Tapez votre recherche ici" size = "50" onchange="operateur(tab, this.value,k);" />';
    		}
    	else
    		{form_d = "";
    		}
        }
    	form_d += 'k : '+k+' <br/><br/><span id="blocOperateur"></span>';
        document.getElementById("blocValeur").innerHTML = form_d;
    }
    


    function operateur(tab, champs,k)
    	{k++;
    	if(champs != "vide")
    		{var form_d = 'k : '+k+' Choisissez une condition si vous voulez rajouter un élément de recherche <br/>';
    		form_d += '<select name="operateur" id="operateur" onchange="appChamps(tab,this.value,k);"> <option value="vide"></option> <option value="et">ET</option> <option value="ou">OU</option> </select> ';
    		}
    		
        else
    		{var form_d = "";
    		}
    	form_d += '<br/><br/><span id="blocChamps"></span>';
        document.getElementById("blocOperateur").innerHTML = form_d;
    	}
    

    function appChamps(tab, champs,k)
    	{if(champs != "vide")
    		{var form_d = '<select name="champs" id="nom_champs" onchange="changeValeur(tab, this.value,k);">';
    		form_d  += '<option value="vide">- - - Choisissez un champs - - -</option>';
    		for (i in tab)
    			{form_d += '<option value="'+i+k+'">'+i+'</option>';
    			}
    		form_d += '</select> ';
    		}
        else
    		{var form_d = "";
    		}
    	form_d += '<br/><br/><span id="blocValeur"></span>';
        document.getElementById("blocChamps").innerHTML = form_d;
    }
    


    Merci à tous ceux qui ont pris la peine de me lire !
    • Partager sur Facebook
    • Partager sur Twitter
      8 juillet 2010 à 20:37:52

      document.getElementById("blocChamps").innerHTML = form_d;
      ->
      document.getElementById("blocChamps").innerHTML += form_d;

      Mais c'est vraiment de la merde ton code.
      Lis le tutoriel sur le bonnes pratiques (il est sur le SdZ) et utilise le DOM, c'est mieux que innerHTML(surtout lorsqu'il s'agit de rajouter des éléments).
      • Partager sur Facebook
      • Partager sur Twitter
        8 juillet 2010 à 20:49:29

        merci, mais toujours pas résolu mon problème...

        j'irai voir ce dont tu me parle

        Merci quand même !
        • Partager sur Facebook
        • Partager sur Twitter

        utilisation de script js plusieurs fois dans une même page

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown