11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Je veux mettre en place une recherche simple basée sur la valeur de deux menus déroulants. Jusque là pas de problème. J'ajoute un lien avec document.getElementById pour afficher deux autre menus déroulants qui permettent de faire une recherche avancée. Tout fonctionne sauf que lorsque j'envoie la recherche, il me ferme automatiquement les deux menus ajoutés. Comment faire pour éviter cela ? Merci de votre aide. Voici le code :
 
<div id="avance" style="display:inline"><a href="#avance" onclick="document.getElementById('searchplus').style.display='block';document.getElementById('avance').style.display='none';document.getElementById('simple').style.display='inline'">Recherche avancée</a></div> 
        <div id="simple" style="display:none"><a href="#simple" onclick="document.getElementById('searchplus').style.display='none';document.getElementById('avance').style.display='inline';document.getElementById('simple').style.display='none'">Recherche simple</a> </div> 
         
          <input name="button" type="submit" class="rechercher" id="button" value="Rechercher" /> 
 
      </form>

Modifié par whynote (08 Nov 2010 - 21:42)
Bonjour whynote,
Peux-tu saisir la totalité de ton code stp ? Il manque la partie avec les menus déroulants.
Oui bien sur, voici le code du formulaire:


<form action="avance.php#h" method="get" name="form2">
       
          <select name="nom">
            <option value="" <?php if (!(strcmp("", $_GET['nom']))) {echo "selected=\"selected\"";} ?>>Professeurs</option>
            <?php
do {  
?>
            <option value="<?php echo $row_rsProf['nom']?>"<?php if (!(strcmp($row_rsProf['nom'], $_GET['nom']))) {echo "selected=\"selected\"";} ?>><?php echo $row_rsProf['prenom']?> <?php echo $row_rsProf['nom']?></option>
            <?php
} while ($row_rsProf = mysql_fetch_assoc($rsProf));
  $rows = mysql_num_rows($rsProf);
  if($rows > 0) {
      mysql_data_seek($rsProf, 0);
 	  $row_rsProf = mysql_fetch_assoc($rsProf);
  }
?>
          </select>
          <select name="nomcompo">
            <option value="" <?php if (!(strcmp("", $row_rsCompo['nomcompo']))) {echo "selected=\"selected\"";} ?>>Compositeurs</option>
            <?php
do {  
?>
            <option value="<?php echo $row_rsCompo['nomcompo']?>"<?php if (!(strcmp($row_rsCompo['nomcompo'], $_GET['nomcompo']))) {echo "selected=\"selected\"";} ?>><?php echo $row_rsCompo['nomcompo']?></option>
            <?php
} while ($row_rsCompo = mysql_fetch_assoc($rsCompo));
  $rows = mysql_num_rows($rsCompo);
  if($rows > 0) {
      mysql_data_seek($rsCompo, 0);
 	  $row_rsCompo = mysql_fetch_assoc($rsCompo);
  }
?>
          </select>
          <div id="searchplus" style="display:none">
          <select name="formation">
            <option value="" <?php if (!(strcmp("", $row_rsFormation['formation']))) {echo "selected=\"selected\"";} ?>>Formation</option>
            <?php
do {  
?>
            <option value="<?php echo $row_rsFormation['formation']?>"<?php if (!(strcmp($row_rsFormation['formation'], $_GET['formation']))) {echo "selected=\"selected\"";} ?>><?php echo $row_rsFormation['formation']?></option>
            <?php
} while ($row_rsFormation = mysql_fetch_assoc($rsFormation));
  $rows = mysql_num_rows($rsFormation);
  if($rows > 0) {
      mysql_data_seek($rsFormation, 0);
 	  $row_rsFormation = mysql_fetch_assoc($rsFormation);
  }
?>
          </select>
          </div> <div id="avance" style="display:inline"><a href="#avance" onclick="document.getElementById('searchplus').style.display='block';document.getElementById('avance').style.display='none';document.getElementById('simple').style.display='inline'">Recherche avancée</a></div>
        <div id="simple" style="display:none"><a href="#simple" onclick="document.getElementById('searchplus').style.display='none';document.getElementById('avance').style.display='inline';document.getElementById('simple').style.display='none'">Recherche simple</a> </div>
        
          <input name="button" type="submit" class="rechercher" id="button" value="Rechercher" />

      </form>

Modifié par whynote (07 Nov 2010 - 09:31)
Si j'ai bien compris l'objet de ta demande, je pense que le plus simple c'est de créer une variable php $searchplus et de faire le script suivant en entête de ta page:


if (isset($_GET['formation'] != ""))
   $searchplus = "none";
else
   $searchplus = "inline";


Et ensuite dans ton formulaire :


<div id="searchplus" style="display:<?echo $searchplus?>"> 


J'ai pas testé mais un truc dans le style devrait fonctionner.
C'est une solution parmi tant d'autres. Tu dois aussi pouvoir faire ça avec Jquery.
Ah oui c'est une excellente idée.
Je ne sais cependant pas pourquoi j'obtiens l'erreur suivante :

Parse error: syntax error, unexpected T_IS_NOT_EQUAL, expecting ',' or ')' in /homez.... on line 8

<?php
if (!isset($_SESSION)) {
  session_start();
}
mysql_query('SET NAMES UTF8');

if (isset($_GET['formation'] != "")) //c'est la ligne 8
   $searchplus = "none"; 
else 
   $searchplus = "inline"; 
   

$logoutAction = $_SERVER['PHP_SELF']."?doLogout=true";
if ((isset($_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){
  $logoutAction .="&". htmlentities($_SERVER['QUERY_STRING']);
}
....
Ah oui, pardon :


if (isset($_GET['formation']) && ($_GET['formation'] != ""))
   $searchplus = "none";  
else  
   $searchplus = "inline";  
Super, il n'y a plus d'erreur. Alors étrangement par défaut il m'affiche le menu déroulant formation"...
Il faut donc inverser ! Si GET['formation'] n'est pas vide, on affiche la liste déroulante "formation:


if (isset($_GET['formation']) && ($_GET['formation'] != "")) 
   $searchplus = "inline";   
else   
   $searchplus = "none";   
C'est super. Merci !

Selon le même principe, j'ai rajouté deux autres variables afin que "recherche avancée" soit remplacée par "recherche simple" (puisque c'est un lien vers la recherche simple) après un rafraichissement de la page si formation n'est pas vide


if (isset($_GET['formation']) && ($_GET['formation'] != ""))
{
   $searchplus = "inline";
   $avance = "none";
   $simple = "inline";
}
else  
{
   $searchplus = "none";
   $avance = "inline";
   $simple = "none";
}



<div id="avance" style="display:<?php echo $avance?>"><a href="#avance" onclick="document.getElementById('searchplus').style.display='block';document.getElementById('avance').style.display='none';document.getElementById('simple').style.display='inline'">Recherche avancée</a></div>
        <div id="simple" style="display:<?php echo $simple?>"><a href="#simple" onclick="document.getElementById('searchplus').style.display='none';document.getElementById('avance').style.display='inline';document.getElementById('simple').style.display='none'">Recherche simple</a> </div>

Modifié par whynote (07 Nov 2010 - 13:15)
Une dernière petite question: quelle serait la syntaxe du
if (isset...
si je rajoute un autre menu déroulant avec "formation" dans la recherche avancée ?
Je ne comprends pas bien le sens de ta question. Il faut que fasse ton if en fonction des champs saisis et des div que veux afficher ou cacher. Je ne vois pas trop ce qui te bloque.
En fait, je voulais rajouter d'autres variables dans la recherche avancée mais j'ai utilisé des elseif et ça fonctionne. Merci de ton aide.