CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Javascript, paramètre fonction flechée retourne undefined

hermeticaa
hermeticaa
Niveau 8
29 juin 2022 à 10:40:57

Salut les kheys, je fais une fonction qui va filtrer des éléments du DOM en utilisant simplement un système de classe, le soucis, est que le paramètre de ma fonction el donne un undefined je ne comprends pas, j'ai jamais eu ce soucis auparavant voici le code :


const buttons = document.querySelectorAll('.kc-filtrestuiles--filters button');
const elements = document.querySelectorAll('.kc-filtrestuiles--content article');


    const filter = el =>{
    for(j=0;j<elements.length;j++){
        if(elements[j].classList.contains(el)){
            elements[j].classList.toggle('revealed');
        }
        else {
            elements[j].classList.remove('revealed');
            elements[j].classList.add('hidden');
        }
    }
   }

    for(i=0;i<buttons.length;i++){
        buttons[i].addEventListener('click', function(){
            filter(buttons[i]);
        }
    , false);
    }
Message édité le 29 juin 2022 à 10:41:13 par hermeticaa
cybevil
cybevil
Niveau 27
29 juin 2022 à 15:41:08

Tu peux nous donner un programme minimal qui fonctionne, donc html + js pour pouvoir tester

Riredelephant
Riredelephant
Niveau 30
03 juillet 2022 à 11:23:24

Verifie que ta liste d’elements ne soit pas vide ? :(

soupeur66
soupeur66
Niveau 17
04 juillet 2022 à 00:17:11

Sinon pour répondre à ta question, tu injectes de l'html (buttons[i]) dans ta fonction filter et tu check si ton element a une classe égale à cet html (elements[j].classList.contains(el)).
En somme t'es en train de faire elements[j].classList.contains(buttons[i])) = aucun sens.

Avec typescript t'aurais eu à écrire

    const filter = (el: HTMLDivElement) =>{
    for(j=0;j<elements.length;j++){
        if(elements[j].classList.contains(el)){
            elements[j].classList.toggle('revealed');
        }
        else {
            elements[j].classList.remove('revealed');
            elements[j].classList.add('hidden');
        }
    }
   }

et ça t'aurait tout de suite indiqué que ta comparaison n'avait pas de sens
en espérant que ça t'aide pour la suite :hap:

Message édité le 04 juillet 2022 à 00:21:32 par soupeur66
soupeur66
soupeur66
Niveau 17
04 juillet 2022 à 00:28:43

Tu prends de mauvaises habitudes, utilise l'event delegation pour ça et utilise typescript, ça t'évitera ce genre de désagréments


const btnContainer = document.querySelector('.kc-filtrestuiles--filters');

const onClick = (e) => {
  const target = e.target;

  if (target.tagName !== "BUTTON") return;

  const buttons = target.parentNode.querySelectorAll("button");
  buttons.forEach(
    (button) => button !== target && button.classList.remove("revealed")
  );

  target.classList.toggle("revealed");
};

btnContainer.addEventListener("click", onClick);
Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment