IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Switch valeur boléeen d'un dataset au click


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 189
    Points : 79
    Points
    79
    Par défaut Switch valeur boléeen d'un dataset au click
    Hello !
    Sur un projet d'une pagination, j'essaye de faire en sorte que mon dataset change (en booléen) si je clique sur tel ou tel page (genre si je clique sur la page 2, celui ci passe en true et toute les autres passe en false) mais j'avoue que je bug un peu dessus depuis un moment (et après quelques recherches internet bien sur !)

    Voici une partie de mon JS actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    const nbPages = Math.ceil(resultat.length/7);
    for(l=0;l<nbPages;l++){
        const page = document.createElement('li');
        page.className = 'page page'+[l+1];
        page.textContent = [l+1];
        page.dataset.num = l+1;
        page.dataset.act = false;
        const pre_article = (l*7)+1;
        const der_article = (l+1)*7;
        pages.appendChild(page);
        page.addEventListener('click',(e)=>{
            for(p=0;p<resultat.length;p++){
                const page_actuelle = der_article/7;
                if(page_actuelle === parseInt(page.dataset.num)){
                    page.dataset.act = true;
                }else{
                    page.dataset.act = false;
                }
        })
    }
    pour la moment ca passe bien en true mais ne repasse pas en false si je clique ailleurs :/

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    débuguez pour voir si le code de l'évènement se lance bien au clic et si les variables contiennent les valeurs prévues.

  3. #3
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 451
    Points : 4 600
    Points
    4 600
    Par défaut
    c'est "normal" : quand tu cliques sur un element, tu le mets a jour, mais tu ne mets jamais a jour les AUTRES...
    ps : t'as oublie l'accolade fermante de ton for()
    de plus : comme tu sais sur quel element tu cliques, pas besoin de calculer la page_actuelle. et tu peux donc simplifier ton code
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    page.addEventListener('click', () => {
        	document.querySelectorAll('.page').forEach(li => {
          li.dataset.act = false;
          });
            page.dataset.act = true;
        });
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 189
    Points : 79
    Points
    79
    Par défaut
    Super ! Ca marche super Doksuri ! Merci ! Bon par contre j'avoue que j'ai un peu de mal à comprendre ta simplification ! Je pense que tu as pu constater que je n'étais pas un développeur confirmé et donc j'ai un peu du mal a saisir comment fonctionne le code... Et je suis pas super fan de c/c un code sans trop le comprendre.

    De plus je n'arrive pas à faire des changement css avec cette version... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                document.querySelectorAll('.page').forEach(li => {
                    li.dataset.act = false;
                    li.style.background = 'transparent';
                });
                page.dataset.act = true;
                page.style.background = '#cccccc';
    Ici le but était de marqué la page actuelle visité avec un fond gris et pas de fond sur les autres pages, ca marche mais ca perturbe le hover du css de base que j'avais.... :

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    .page{
            border-radius: 50%;
            background: transparent;
            width: 3rem;
            height: 3rem;
            transition: all 300ms ease;
            box-shadow: none;
            text-align: center;
            margin: 0 1.5rem;
            display: flex;
            flex-direction: column;
            justify-content: center;
        }
        .page:hover{
            background: var(--blueback);
            box-shadow: 8px 8px 15px -8px rgba(0,0,0,0.75);
            transform: scale(105%);
            cursor: pointer;
        }
        .page:active{
            box-shadow: none;
            background: var(--bluehov);
            transform: scale(105%);
        }

  5. #5
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 451
    Points : 4 600
    Points
    4 600
    Par défaut
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    page.addEventListener('click', () => { // quand on clique sur une des page
        	document.querySelectorAll('.page').forEach(li => { // je selectionne toutes les pages (elements qui ont la classe "page"), et je boucle dessus
          li.dataset.act = false; // pour la page en cours de bouclage, je passe l'attribut "act" a false
          }); // fin de boucle
            page.dataset.act = true; // pour la page sur laquelle on a clique, je passe l'attribut "act" a true
        });
    j'espere que ca t'aide a mieux comprendre

    pour ce qui est du CSS, tu peux appliquer un style a un element qui a un attribut (pas besoin d'ajouter des classes a gogo)
    tu peux par exemple faire :
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .page[act="true"]{
            background: #cccccc;
        }
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 189
    Points : 79
    Points
    79
    Par défaut
    Merci pour tes explications, oui je comprends mieux c'est juste le (li => {li.dataset.act = false;}) que je trouve un peu technique (la construction pas le contenue)

    Sinon j'ai testé ta méthode css mais ça ne marche pas
    Dommage je trouvais ça bien

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        .page[act="true"]{
            background: #deeefd;
        }

    J'ai essayé en ajoutant !important ça change rien

  7. #7
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    Sinon j'ai testé ta méthode css mais ça ne marche pas
    il y a une petite coquille, à savoir que lorsque l'on écrit element.dataset.quelquechose = la_valeur cela génère un attribut <balise data-quelquechose = "la_valeur">...</balise>.

    Pour le cibler en CSS il faut donc écrire
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    balise[data-quelquechose="la_valeur"]{
      // le style qui va bien
    }

    Citation Envoyé par Doksuri
    pour ce qui est du CSS, tu peux appliquer un style a un element qui a un attribut (pas besoin d'ajouter des classes a gogo)
    et inversement, tu peux gérer cela avec une classe sans passer par un attribut ce qui me semblerait plus logique pour appliquer du CSS.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/01/2010, 22h33
  2. Réponses: 2
    Dernier message: 09/09/2008, 16h31
  3. Réponses: 3
    Dernier message: 28/03/2008, 16h51
  4. Réponses: 2
    Dernier message: 21/09/2007, 11h37
  5. Réponses: 1
    Dernier message: 14/03/2007, 16h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo