• imprimer
  • aide

Forum de discussions « Javascript - DHTML - VBScript »

Retrouvez les publications relatives à ces discussions dans notre rubrique javascript.

Fonction javascript cacher div appelée plusieurs fois dans une boucle php

liste des forums liste des discussions Participer à la discussion

Photo de Styleman Message publié le mardi 24 janvier 2012 - 16h12 par Styleman. ++ Styleman
Bonjour,

Je me heurte a un petit problème, voilà, j'ai une requete php qui me retourne donc un nombre de résultat variable et qui sont chacun dans un div, et j'aimerais que lorsque je clic sur un lien qui se situe dans un de ces div, les autres disparaissent.

Voilà comment j'ai procédé:
Code javascript:
<script type="text/javascript"> function visibilite(thingId) { var targetElement; targetElement = document.getElementById(thingId) ; targetElement.innerHTML = "" ; } </script>
Et pour le php:
$hide = ""; while($ligne=mysql_fetch_array($ress)){ $hide.= "visibilite('$ligne[id]'); "; $return.= "<tr><td>$ligne[heure] - $ligne[fin]</td><td>$ligne[sport]</td><td>$ligne[salle]</td><td>$ligne[ville]</td><td>$dispo/$ligne[place]</td><td><div id=$ligne[id]>"; $return.= "<a href=# onClick=\"maFonctionAjax($ligne[id],$tennis); $hide return false\">Reserver</a>"; $return.= "</div></td></tr>"; }
Donc, chaque div s'appelle par l'id dans la base de donnée, sur le onClick j'appelle une fonction ajax et $hide qui est en fait l'appel de la fonction visibilite pour chaque div.

Bizarrement, cela fonctionne pour quelques requete (c'est toujours la même, ça change juste par date, parfois il y a des jours avec plus de resultat) mais parfois ça ne fonctionne pas, les div ne disparaissent pas...

Cela fait maintenant trois jours que j'essaie de comprendre, mais n'étais pas vraiment familier à javascript,j 'ai un peu de mal, donc si quelqu'un savait m'aider, ce serait génial!

Merci beaucoup!
Photo de jules Message publié le mardi 24 janvier 2012 - 21h21 par jules. modérateur
Bonsoir,

J'ai un peu de mal à suivre ce que tu tentes de faire.

La page avec le problème est-elle accessible que je puisse en voir le code ?
Que représente la variable $tennis dans ta fonction ajax ?

Si tu n'es pas familier avec le javascript, essaye de d'étudier l'utilisation des bibliothèques qui facilitent bien le développement comme jQuery par exemple : http://jquery.com
Photo de Styleman Message publié le mardi 24 janvier 2012 - 22h06 par Styleman. ++ Styleman
$tennis = 1 si $ligne[sport] = "Tennis" parce qu'alors par requete avec Ajax est differente.

Sinon la page n'est pas accessible sans se logger, et pour faire un compte il faut un numéro de carte d'accès....

Mais la fonction ajax fonctionne impeccablement que ce soit avec ou sans l'autre fonction javascript, mais peut-être devrais-je voir si l'inverse se vérifie? Donc si la fonction visibilite fonctionne sans la fonction ajax... je vais voir ça de suite.
Photo de Styleman Message publié le mardi 24 janvier 2012 - 22h10 par Styleman. ++ Styleman
Non le problème persiste même en enlevant cette fonction
Photo de Styleman Message publié le mardi 24 janvier 2012 - 22h11 par Styleman. ++ Styleman
Ce que je tente de faire: En fait, c'est un script pour réserver des terrain de sport, mais lorsqu'on en a réservé un dans la liste, on ne doit plus pouvoir réserver les autres, c'est pour cela qu'il faudrait que je trouve un moyen pour que quand on clic sur un "Réserver", les autres disparaissent ;)
Photo de jules Message publié le mardi 24 janvier 2012 - 23h08 par jules. modérateur
Je me demande si avoir un id avec un uniquement numéro est bien valide… je crois me souvenir que non.

Ton code id=$ligne[id] doit généré un truc du genre id=9, id=10, etc. (un pour chaque ligne)…
Il faudrait que tu tentes un id='ligne-$ligne[id]' pour obtenir id='ligne-9', id='ligne-10', etc. (pour chaque ligne).

Et que tu remplaces par $hide.= "visibilite('$ligne[id]'); "; par $hide.= "visibilite('ligne-$ligne[id]'); "; afin que tout corresponde bien.
Photo de Styleman Message publié le mercredi 25 janvier 2012 - 01h03 par Styleman. ++ Styleman
Ah, c'est bien possible, je me penche là dessus dès que je peux, mais merci beaucoup, je pense que c'est là que ça coince!!!
Photo de Styleman Message publié le mercredi 25 janvier 2012 - 01h23 par Styleman. ++ Styleman
Voilà, j'ai changé le nom du div mais rien n'y fait :(
Photo de jules Message publié le mercredi 25 janvier 2012 - 08h33 par jules. modérateur
Ah, le matin aidant, je vois un peu mieux ce que tu essayes de faire.

Je pense qu'il y a un problème de logique dans ton code.
En cliquant sur ton lien réserver, tu vas exécuter la fonction "visibilite('$ligne[id]');" et donc, dans le meilleur des cas, seule la ligne sur laquelle tu as cliqué va disparaitre.

Je te propose la solution suivante, en utilisant la bibliothèque jQuery :
Dans le head de ta page, insère le code suivant pour initialiser jquery.
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

Puis remplace le <div id=$ligne[id]> par <div class='ligne'> En utilisant une classe on pourra sélectionner plus facilement tous les éléments.

Et enfin, transforme ta fonction javascript en :
<script type="text/javascript"> function visibilite() { $("div.ligne").hide(); // jQuery sélectionne tous les div avec la classe "ligne" et les cache. } </script>
et modifie l'appel :
$hide.= "visibilite('$ligne[id]'); ";
en
$hide.= "visibilite(); ";

liste des forums liste des discussions Participer à la discussion

Vous devez obligatoirement vous identifier en tant que membre pour participer à cette discussion.

ACCÉS COMMUNAUTÉ

Rejoignez ALL HTML

Publiez vos articles, actualités, communiqués ... Donnez votre avis, partagez votre réseau, rencontrez d'autres membres et participez à la vie de la communauté.

Les 5 dernières discussions