Partage
  • Partager sur Facebook
  • Partager sur Twitter

if qui ne fonctionne pas

Sujet résolu
    25 septembre 2021 à 16:20:28

    Bonjour à tous, j'ai un gros soucis : je fait un mini jeu de bingo, mais quand je veux vérifier si justement il y a bingo cela ne fonctionne pas
    Mon code :
    function verif(id) {
        valeurId = document.getElementById(id).innerHTML;
        genInt.forEach(function(item){
            if (valeurId == item){
                document.getElementById(id).classList.add("checked");
            }
        });
        const lines = [
            [0, 1, 2, 3, 4],
            [5, 6, 7, 8, 9],
            [10, 11, 12, 13, 14],
            [15, 16, 17, 18, 19],
            [20, 21, 22, 23, 24],
        ];
        let checked = document.getElementById(id).getAttribute("class");
        console.log(checked);
        for (let i = 0; i < lines.length; i++) {
            const [a, b, c, d, e] = lines[i];
            if ([a] && [b] && [c] && [d] && [e] == checked) { //NE RENTRE JAMAIS DANS LE IF POUR UNE ALERT
                alert("BINGO");
            }
        }
    }
    Quand un chiffre se trouve sur la carte et dans les chiffre générer automatiquement, j'ajoute la class "checked" à ma case, ensuite je récupère le nom de ma class ("checked") que je met dans une variable checked. j'analyse si une ligne est totalement remplis grâce à un tableau a deux dimension, sauf que mon if ne passe pas quand j'ai une class "checked", pourtant c'est un string ... et si je remplace "==" par "!=" il rentre bien dans le if ... je suis perdu et j'espère avoir été assez clair, merci de vos réponse !
    • Partager sur Facebook
    • Partager sur Twitter
      25 septembre 2021 à 16:27:19

      Bonjour,

      Pour des comparaisons, il vaux mieux utiliser === (ou !==), == peut porter à confusion : console.log(0 == "")//true

      innerHTML peut renvoyer des balises html, innerText me semble plus approprié.

      Ton deuxième if passeras jamais, ça peut se voir comme ça :

       if (true && true && true && true && false) {...}
      
      



      -
      Edité par piero5673 25 septembre 2021 à 16:32:08

      • Partager sur Facebook
      • Partager sur Twitter
        25 septembre 2021 à 18:02:37

        merci piero5673, je ne vois pas pourquoi mon array [e] retournerais false vu qu'il semble être définis quand je découpe la boucle for avec des points d'arrêt dans le navigateur ...

        as-tu une explication ?

        • Partager sur Facebook
        • Partager sur Twitter
          25 septembre 2021 à 18:33:44

          Ce qui serait évalué à false, ce serait [e] == checked ?
          • Partager sur Facebook
          • Partager sur Twitter
            25 septembre 2021 à 22:04:28

            Ce n'est pas la valeur de e qui est testée, c'est la référence au tableau. Vu que tu créé un tableau dans ton if ce seras toujours faux :

            const a = [1];
            const b = [1];
            console.log(a === b)//false
            console.log(a === [1])//false

             En fait, quelque soit les valeurs de a, b, c, d, e et checked :

            if (
              ([a]/*true*/) && 
              ([b]/*true*/) && 
              ([c]/*true*/) && 
              ([d]/*true*/) && 
              ([e] == checked /*false*/)
            ) {
            ...
            }



            -
            Edité par piero5673 25 septembre 2021 à 22:11:34

            • Partager sur Facebook
            • Partager sur Twitter
              26 septembre 2021 à 12:30:28

              Je vais devoir changer de solution ... si vous avez des piste n'hésitez pas, merci pour tout vos message.
              • Partager sur Facebook
              • Partager sur Twitter
                26 septembre 2021 à 21:24:04

                Avec ton exemple, c'est un peu vague, pourrais-tu faire un jsfiddle ou un codepen ?
                • Partager sur Facebook
                • Partager sur Twitter

                if qui ne fonctionne pas

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown