Quelques lignes de javascript

Fermé
obk - 18 déc. 2010 à 01:13
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 - 18 déc. 2010 à 13:41
Bonjour,


Je suis en train de concevoir un site web mais je ne suis pas très à l'aise en javascript. J'aurais aimé que quelqu'un m'aide pour coder un filtre dynamique qui me fasse disparaître les blocs non pertinents. Je m'explique :

voici le code de mes blocs :
while($courant = mysql_fetch_assoc($reponse))
    {

$date = "{$courant['date']}";
$aDate = explode('-', $date);
$date=strftime("%d %B %Y", mktime(0, 0, 0, $aDate[1], $aDate[2], $aDate[0]));
$date = utf8_encode($date);

        echo <<<END
        <div class='{$courant['date']}'>
        <div class='{$courant['alias']}'>
        <fieldset>
	 <legend>{$date}</legend>

        <div class='event'>
        
                <h1>{$courant['nom']}</h1>
                  <div class='details'>{$courant['description']}</div>

                    <div class = 'signature'>
                    {$courant['editeur']}<br/>
                    {$courant['ecole']}
                    </div>
                    </fieldset>
                </div>
                </div>
         
END;
(le code est volontairement incomplet, je n'ai mis que la partie nécessaire à la compréhension de ma demande)

Je voudrais un filtre qui affiche tout par défaut mais qui puisse faire en sorte d'afficher seulement certains $courant['alias'] donnés. Pour me simplifier la compréhension, partons du principe que $courant['alias'] ne prend que la valeur a ou b !

Merci de votre aide !

Ps : à savoir que par la suite je compte combiner ce filtre à un filtre du type date picker, qui permette de même d'afficher toutes les dates par défaut et qui n'affiche qu'une date donnée lorsque le date picker est utilisé. Je voudrais pouvoir utiliser les deux filtres simultanément. (grâce au $courant['date'])



3 réponses

Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
18 déc. 2010 à 02:21
Bonsoir,
Il est où le JavaScript ? Je ne vois que du PHP ^^

Ta question est assez floue :/ Quand tu dis que tu veux ne pas afficher des éléments, tu veux qu'ils soient générés mais invisibles, ou bien pas générés ? Sinon à mes yeux, ton filtrage a sa place dans la clause WHERE de ta requête SQL, que tu ne montres pas...

J'attends des nouvelles ;)
0
Bonjour,

Effectivement il n'y a pas de Javascript pask je ne sais pas du tout comment partir pour coder le script. Et en effet, je veux que tous les résultats soient générés pour en masquer certains lorsque l'utilisateur utilise le filtre. Je voyais ca comme une liste de checkbox a,b,c, etc et lorsque je coche une ou plusieurs cases, seuls les résultats correspondant restent affichés.

Je peux me tromper, mais j'ai cru comprendre que c'était plus simple en Javascript (par la méthode de masquage de blocs déjà généré) plutôt que de générer une nouvelle requête sql a chaque fois que l'on
Coche une case, nan ?



Merci encore
0
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
18 déc. 2010 à 13:41
Ok je vois.
C'est un problème assez classique en JS, cliquer sur un élément pour en masquer un autre.
Pour moi, la solution la plus propre est d'utiliser la délégation d'évènements, mais si tu n'es pas à l'aise avec JS, on va prendre une solution plus simple.

Je te donne l'idée générale, et je te laisserai chercher par toi-même pour adapter ça à ta situation.
On a, d'une part, une fonction JS pour masquer un élément, sélectionné par son id.
function masquer( id ) {
    document.getElementById(id).style.display = 'none';
};

C'est une bonne habitude à prendre de séparer les scripts et le code HTML : mets le script qui déclare cette fonction dans le <head>.

Ensuite, il faut surveiller l'évènement click. La solution propre s'appelle gestionnaire d'évènements (event listener en anglais) mais comme tu es débutant tu as le droit d'utiliser le viel attribut onclick :
<div id="masque-moi">
    ...
</div>
<a href="#" onclick="masquer('masque-moi')">Clique-moi !</a>

Il faudra que tu génères un onclick et un id adaptés à chacun des couples d'éléments générés par ton PHP.

Maintenant il te faut une fonction pour ré-afficher les éléments masqués. Déclare-là dans le même script que la fonction masquer. Le principe est de « réinitialiser » la valeur display de l'élément :
function afficher( id ) {
    document.getElementById(id).style.display = '';
};

Et comme tu ne peux pas mettre deux onclick sur le même élément, il te faudra un deuxième élément, ou alors une sorte de « mémoire ». Les checkbox sont pratiques pour ça car tu peux utiliser leur propriété checked. Là j'utilise l'objet this qui permet de repérer dynamiquement quel élément a été cliqué :
*** HTML ***
<input type="checkbox" onclick="basculer(this, 'masque-moi')" />

*** JS ***
function basculer( chkbox, id ) {
    if (chkbox.checked) {
        masquer(id);
    } else {
        afficher(id);
    };
};


Bon courage !
0