Comment appliquer un display a l'aide de class

Fermé
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 - Modifié le 20 févr. 2023 à 09:37
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 - 20 févr. 2023 à 23:16

Bonjour,a tous

etant toujours occuppé dans mon bon de commande 

il me reste encore une chose a regler 

je souhaiterais lorsque je clic su ajouter au panier qu'une nouvelle div puisse apparaitre 

voici un extrait tout simple de mon de actuel avec les div pareilles qui ne peux pas fonctionner 

           
function myFunction() {
  var abc = document.getElementById("panel");
  abc.style.display = ""
}
                  <a data-nom="2001" class="btn btn-primary ajouter-panier b-items__item__add-to-cart" onclick="myFunction();">
                       ajouter au panier
                     </a><br>

                     <div class="panel" style="display:none">
                       <a data-qte2="0" class=" ajouter-panier ">
                         retirer panier
                       </a><br>
                     </div>
                     <a data-nom="2002" class="btn btn-primary ajouter-panier b-items__item__add-to-cart" onclick="myFunction();">
                       ajouter au panier
                    </a><br>

                     <div class="panel" style="display:none">
                       <a data-qte2="0" class=" ajouter-panier ">
                         retirer panier
                       </a><br>
                     </div>
                     <a data-nom="2003" class="btn btn-primary ajouter-panier b-items__item__add-to-cart" onclick="myFunction();">
                       ajouter au panier
                     </a><br>

                     <div class="panel" style="display:none">
                       <a data-qte2="0" class=" ajouter-panier ">
                         retirer panier
                       </a>
                     </div>

8 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
20 févr. 2023 à 10:13

Bonjour

"panel" est une CLASS et non un ID de tes DIV. tu ne dois donc pas utiliser :  getElementById


0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179
20 févr. 2023 à 10:24

bonjour Jordane 

Autant pour moi 

Merci pour reponse en fait je devais ecrie ceci 

Mais lors du copier coller j'ai pris l'ancien code

Mais avec ce code cela ne fonctionne pas 

j'ai cette erreur

Uncaught TypeError: Cannot set properties of undefined (setting 'display')"

function myFunction() {
  var elems = document.getElementsByClassName('panel');
  elems.style.display = '';  
}
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024
20 févr. 2023 à 10:29

Note le S dans le mot getElementsByClassName

Comme en français, cela a une utilisé et exprime un éventuel pluriel.

Contrairement à  getElementById  (qui ne contient pas de S ) car un ID est forcément UNIQUE dans une page web. (le contraire serait une très grossière erreur de débutant à vite corriger ! )

En regardant la documentation de cette méthode, tu devrais comprendre comment l'utiliser : https://www.w3schools.com/jsref/met_document_getelementsbyclassname.asp

0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179 > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
20 févr. 2023 à 10:46

Merci Jordane pour l'explicaion 

oui oui je sais que l'ID doit etre unique

je suis alle voir la documentation que j'avais déjà ete voir

Mais ce qui m'ennuie c'est cette notion de tableau [0]

car lorsque je clic le bouton ajouter au panier de l'article 2003 

je devrais savoir a quel place dans le tableau se trouve cette class "panel"

afin de pouvoir la rendre visible

je supposse que cela doit se faire dans une boucle ?

pour la premiere class ce code fonctionne , mais ensuite ...

function myFunction() {
 var element = document.getElementsByClassName('panel');
element[0].style.display = ''; 
}
0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179 > flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024
20 févr. 2023 à 10:54

j'ai essayé avec ceci mais alors cela affiche toutes les class panel

       function myFunction() {
             var a = document.getElementsByClassName("panel");
             for (i = 0; i < a.length; i++) {
               a[i].style.display = '';
             }
           }
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
20 févr. 2023 à 11:33

Interesse toi à la méthode document.querySelectorAll et pour cibler les éléments voulus, ce sont les mêmes selecteurs qu'en CSS.

Par exemple, tu pourrais cibler les  éléments "masqués" ayant la class "panel"

Un selecteur du genre :

.panel[style*=display:none]

Et tu ne gardes que le premier comme tu as fais avec la méthode getByClassNames


0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179
20 févr. 2023 à 12:02

Merci jordane 

je viens d'essayer ceci mais cela ne me retourne rien 

 const a = document.querySelectorAll(".panel[style*=display:none]");
 console.log ("display",a)
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
20 févr. 2023 à 12:09
 var a = document.querySelectorAll(".panel[style*='display:none']");
 console.log ("display",a)
0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179
20 févr. 2023 à 12:42

Merci Jordane pour le code

Cela fonctionne nickel

lorsque je clic sur le bouton qui vient d'apparaitre cela me dirige vers la fonction ajouter au panier 

avec laquelle je fais passer cet argument 

data-qte2="0"

qui va me servir a retirer mon article de mon panier 

ainsi que de supprimer les couleurs de fond 

Mais je butte pour remettre ma class panel en none cette fois-ci

j'essaye avec ce code 

Mais ma class ne veux pas redevenir none

Dans la console aucune erreur

 if (test === "0") {
   console.log("je suis a 0")
   console.log("le nom", $(this).data('nom'))

   //je supprime l'article du panier 
   var nom = $(this).data('nom')
   MonPanier.enlever_produit_de_panier_tous(nom);

   //si le nom de l'article est egal a 77777 ou 88888 ou encore 99999 je retire la couleur de fond
   if (nom == "77777" || nom == "88888" || nom == "99999") {
     const collection12 = event.currentTarget.parentElement.parentElement.parentElement.parentElement
     const h1 = event.currentTarget.parentElement.parentElement.parentElement.previousElementSibling
     collection12.style.backgroundColor = "";
     h1.style.backgroundColor = "";

     //si article different de 77777 ou 88888 ou 99999 alors j'utilise ce code pour enlever la couleur de fond
   } else {
     const collection12 = event.currentTarget.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement
     const h1 = event.currentTarget.parentElement.parentElement.parentElement.previousElementSibling
     console.log(collection12)
     collection12.style.backgroundColor = "";
     h1.style.backgroundColor = "";
   }
    document.querySelectorAll(".panel[style='display:none']");
 
}
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
20 févr. 2023 à 14:40

Ligne 24 .. aucune utilité ....  

  document.querySelectorAll(".panel[style='display:none']");  sert à CIBLER un élément en fonction du selecteur que tu as indiqué.

Cette ligne de code ne change par le display ..  et comme tu ne l'assignes à aucune variable.. elle n'est pas utilisée donc totalement inutile !

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179
Modifié le 20 févr. 2023 à 13:45

j'ai modifie mon code de cette maniere 

Mais ma classe ne redevient toujours pas a none

function myFunction() {   
  var a = document.querySelectorAll(".panel[style*='display:none']");
 console.log ("display",a)
a[0].style.display = ''; 

}

function myFunction2() { 
  var a = document.querySelectorAll(".panel[style*='display:']");
 console.log ("display",a)
a[0].style.display = 'none'; 
}
                <a style="cursor: pointer; margin-bottom: 5px;width: 90%;display: block;margin-left: auto;margin-right: auto;" data-nom="2001" data-prix="1.10" data-qte="1" data-checkbox="2001" data-url="https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2001.JPG" class="btn btn-primary ajouter-panier b-items__item__add-to-cart" onclick="setTimeout(() => ouvreMaJolieAlert(event), 1000);myFunction();">
                         ajouter au panier
                       </a>


                       <div class="panel" style="display:none">
                         <a style="cursor: pointer; margin-bottom: 5px;width: 90%;display: block;margin-left: auto;margin-right: auto;" data-nom="2001" data-prix="1.10" data-qte2="0" data-checkbox="2001" data-url="https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2001.JPG" class=" ajouter-panier " onclick="myFunction2();">
                           ajouter au panier
                         </a>
                       </div>
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
20 févr. 2023 à 14:44
".panel[style*='display:']"

display:   ????

je doute que ça fonctionne...

display attend soit none, soit block, soit inline-block  ou n'importe quelle autre valeur "valide" pour cette propriété :

https://developer.mozilla.org/fr/docs/Web/CSS/display

.. mais vide.. non.. ..ça n'existe pas !

0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179
Modifié le 20 févr. 2023 à 16:28

Merci pour la reponse Jordane 

Mais j'avais lu cela quelque part que l'on pouvait juste retirer le none pour faire l'effet inverse

bref voici mon nouveau code mais celui ci me retourne une erreur 

Uncaught TypeError: can't access property "style", b[0] is undefined 

Qui m'indique donc que style n'est pas defini

Peut etre le fait que le onclick est declenché dans le div de la classe panel

mon code html

                    <a style="cursor: pointer; margin-bottom: 5px;width: 90%;display: block;margin-left: auto;margin-right: auto;" data-nom="2001" data-prix="1.10" data-qte="1" data-checkbox="2001" data-url="https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2001.JPG" class="btn btn-primary ajouter-panier b-items__item__add-to-cart" onclick="setTimeout(() => ouvreMaJolieAlert(event), 1000);myFunction();">
                               ajouter au panier
                             </a>


                             <div class="panel" style="display:none">
                               <a style="cursor: pointer; margin-bottom: 5px;width: 90%;display: block;margin-left: auto;margin-right: auto;" data-nom="2001" data-prix="1.10" data-qte2="0" data-checkbox="2001" data-url="https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2001.JPG" class=" ajouter-panier " onclick="myFunction2();">
                                 retirer du panier
                               </a>
                             </div>
function myFunction() {
  var a = document.querySelectorAll(".panel[style*='display:none']");
 console.log ("display",a)
a[0].style.display = 'block'; 
}

function myFunction2() {
  var b = document.querySelectorAll(".panel[style*='display:block']");
 console.log ("display",b)
b[0].style.display = 'none'; 
}
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
20 févr. 2023 à 17:21

As tu regardé ce que t'affiche ton console.log ?

Es-tu sûr que la variable b  n'est pas null ?

As tu mis un style='display:block' par défaut sur tes divs ?

A noter qu'il est préférable de jouer avec des class CSS plutôt que l'attribut style.

Tu pourrais très bien te créer un class "visible" avec le style display block  et une autre "masquee" avec le display à none. 

Puis dans ton code, tu ajoutes/retire la class sur ton élément html en fonction de ce que tu veux obtenir.

0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179 > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
20 févr. 2023 à 18:23

Merci pour ta reponse jordane

je viens de regarder pour ma variable a j'ai ceci

pour la variable b jai ceci

As tu mis un style='display:block' par défaut sur tes divs ?

non ma div par defaut doit etre en none car je la veux la cacher au depart 

je ne veux que le boutton retirer du panier apparaisse que lorsque au moins un article est dans le panier 

donc d'apres ce que je comprends de ce que tu m'expliques

voci mon code html , mais pour ce qui est du javascript je ne trouve aucun exemple sur google pour le realiser sur la class d'un article bien particulier 

        <a style="cursor: pointer; margin-bottom: 5px;width: 90%;display: block;margin-left: auto;margin-right: auto;" data-nom="2001" data-prix="1.10" data-qte="1" data-checkbox="2001" data-url="https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2001.JPG" class="btn btn-primary ajouter-panier b-items__item__add-to-cart" onclick="setTimeout(() => ouvreMaJolieAlert(event), 1000);myFunction();">
                               ajouter au panier
                             </a>


                             <div class="panel" style="display:none;visibility: hidden;">
                               <a style="cursor: pointer; margin-bottom: 5px;width: 90%;display: block;margin-left: auto;margin-right: auto;" data-nom="2001" data-prix="1.10" data-qte2="0" data-checkbox="2001" data-url="https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2001.JPG" class=" ajouter-panier " onclick="myFunction2();">
                                 retirer du panier
                               </a>
                             </div>

le bouton ajouter au panier lui restera toujours visible 

ce n'est que la div panel qui doit apparaitre et disparaitre , suivant qu 'il y a oui ou non des quanditees de cet article dans le panier

c'est pour cela que quand je clic su ajouter au panier la div panel doit apparaitre et que lorsque je clic sur retirer du panier 

la div panel doit disparaitre

0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024
20 févr. 2023 à 20:13

Où as-tu mis tes consoles.log ?

Peux-tu nous montrer le code modifié ?

À noter qu'il faut bien garder ce code là et pas celui que tu as proposé dans le message suivant...

Encore une fois, tu copies colle des codes, sans en comprendre le fonctionnement d'ou tes difficultés à les faire fonctionner comme tu le souhaites...

0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179 > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
20 févr. 2023 à 20:23

Merci jordane 

si si j'ai bien compris que mon code ci dessous fais uen boucle pour rechercher toutes les class panel et que le code que j'ai posté plus bas changera toutes les divs

mais je ne parviens pas a faire mieux pour l'instant 

je suis toujours bloqué avec le code de tantot que je reposte 

j'ai beau cherché, mais je ne trouve rien 

function myFunction() {
  var a = document.querySelectorAll(".panel[style*='display:none']");
 console.log ("display",a)
a[0].style.display = 'block'; 
}

function myFunction2() {
  var b = document.querySelectorAll(".panel[style*='display:block']");
 console.log ("display",b)
b[0].style.display = 'none'; 
}
0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179
20 févr. 2023 à 19:48

ce code fonctionne super nickel mais agit sur tous les articles 

function myFunction() {
const nodeList = document.querySelectorAll(".panel");
for (let i = 0; i < nodeList.length; i++) {
    nodeList[i].style.visibility=" visible";
}
}

function myFunction2() {
const nodeList = document.querySelectorAll(".panel");
for (let i = 0; i < nodeList.length; i++) {
    nodeList[i].style.visibility=" hidden";
}

}
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
20 févr. 2023 à 21:39

Je te propose cette fonction

function afficheMasqueDiv(display){
  let laDiv = document.querySelectorAll(".panel[style*='display:"+display+"']");
  console.log ("Liste des div correspondant au style cherché",laDiv);
  if(laDiv.length > 0 ){
    let newDisplay = display == 'none' ? 'block' : 'none' ;
    laDiv[0].style.display = newDisplay; 
  }else{
    console.log("Aucune div avec le display = " + display + " n'a été trouvée !";
  }
}

Que tu peux ensuite utiliser dans tes autres fonctions :

function myFunction() {
   fficheMasqueDiv('none');
}

function myFunction2() {
   afficheMasqueDiv('block');
}

Ou mieux, directement y faire appel à la place de tes deux fonction ( en passant le paramètre souhaité )

par exemple :

<a style="cursor: pointer; margin-bottom: 5px;width: 90%;display: block;margin-left: auto;margin-right: auto;" 
    data-nom="2001" data-prix="1.10" data-qte="1" data-checkbox="2001" 
    data-url="https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2001.JPG" 
    class="btn btn-primary ajouter-panier b-items__item__add-to-cart" 
    onclick="setTimeout(() => ouvreMaJolieAlert(event), 1000);afficheMasqueDiv('none');">

0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179
20 févr. 2023 à 22:51

Merci jordane pour le code mais malheureusement cela ne fonctionne pas 

lorsque je clic sur ajouter au panier 

la div panel reste invisible 

voici le code 

                                       <a style="cursor: pointer; margin-bottom: 5px;width: 90%;display: block;margin-left: auto;margin-right: auto;" data-nom="2001" data-prix="1.10" data-qte="1" data-checkbox="2001" data-url="https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2001.JPG" class="btn btn-primary ajouter-panier b-items__item__add-to-cart" onclick="setTimeout(() => ouvreMaJolieAlert(event), 1000);myFunction();">
                                         ajouter au panier
                                       </a>


                                       <div class="panel" style="display:none;">
                                         <a style="cursor: pointer; margin-bottom: 5px;width: 90%;display: block;margin-left: auto;margin-right: auto;" data-nom="2001" data-prix="1.10" data-qte2="0" data-checkbox="2001" data-url="https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2001.JPG" class=" ajouter-panier " onclick="myFunction2();">
                                           retirer du panier
                                         </a>
                                       </div>
function afficheMasqueDiv(display){
  let laDiv = document.querySelectorAll(".panel[style*='display:"+display+"']");
  console.log ("Liste des div correspondant au style cherché",laDiv);
  if(laDiv.length > 0 ){
    let newDisplay = display == 'none' ? 'block' : 'none' ;
    laDiv[0].style.display = newDisplay; 
  }else{
    console.log("Aucune div avec le display = " + display + " n'a été trouvée !");
  }
}

function myFunction() {
   afficheMasqueDiv('block');
}

function myFunction2() {
   afficheMasqueDiv('none');
}
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024
20 févr. 2023 à 23:01

Je te donne 20 lignes de code .. et tu as été capable d'inverser les deux fonctions....  bien joué... :-)

En plus, si tu avais regardé la console tu aurais vu des messages d'erreur

J'ai fait une faute de frappe dans la fonction myFunction, j'ai oublié un a devant ffiche...

La console m'a également permis de voir que lorsqu'on affecte un style en JS, il met un espace entre les deux points et la valeur  display: block

Pour que le code fonctionne, il faut donc prendre en compte cet espace.

Voici le code js corrigé

function myFunction() {
   afficheMasqueDiv('none');
}

function myFunction2() {
   afficheMasqueDiv('block');
}

function afficheMasqueDiv(display){
  let laDiv = document.querySelectorAll(".panel[style*='display: "+display+"']");
  console.log ("Liste des div correspondant au style cherché",laDiv);
  if(laDiv.length > 0 ){
    let newDisplay = display == 'none' ? 'block' : 'none' ;
    laDiv[0].style.display = newDisplay; 
  }else{
    console.log("Aucune div avec le display = " + display + " n'a été trouvée !");
  }
}

Il faut donc aussi mettre cet espace dans ton html

  <div class="panel" style="display: none;">
0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179 > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
Modifié le 20 févr. 2023 à 23:16

Merci pour la correction jordane en fait je pensais que l'on avait besoin d'abord de la fonction afficheMasqueDiv

en premier lieu pour ensuite l'utiliser dans les fonctions myfunction et myfunction2

oui j'avais vu qu'il manquait un a puisque je l'ai corrigé , ainsi qu'une parenthese a une console

Le code fonctionne parfaitement sur un article 

Je viens de l'essayer sur deux articles 

Mais lorsque je clic sur ajouter au panier de l'article 2 

la div panel apparait non pas sur l'article 2 mais sur le premier article

0