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 :

Comportement Méthode push


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2019
    Messages : 45
    Par défaut Comportement Méthode push
    Bonjour,

    Je ne comprends la sortie de mon tableau memocard.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function showCard(){
    let memocard = [];
        document.addEventListener('mousedown', (e)=>{
            let clickcards = e.target.id;
            memocard.push(clickcards);
            document.getElementById(clickcards).style.color = "blue";
        });
    Quand je demande le tableau memocard il se passe un truc bizarre.

    Par exemple premier clique sur l'élément, memocard donne = ['element1']

    Deuxième clique sur un autre élément de la fenetre, memocard donne = ['elelment1', 'element2', 'element2']

    troisième clique sur au autre élement de la fenetre, memocard donne = ['elelment1', 'element2', 'element2', 'element 3', 'element 3', 'element 3']

    Et ainsi de suite....

    Pourriez-vous me dire pourquoi j'obtiens ce comportement ?

    Merci de votre aide.

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    Bonjour,

    Je n'ai pas ce comportement quand je teste;
    Je ne sais pas comment tu appelles showCard(). Sur load de window? J'ai essayé aussi et le tableau se remplit normalement;

  3. #3
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2019
    Messages : 45
    Par défaut
    La fonction ShowCard() est lancée au moment de l'activation de la fonction play().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function play(){
        document.addEventListener('click', (e)=>{
            let clickcards = e.target.id;
            let cardValue = document.getElementById(clickcards).innerHTML;
            showCard();
     
            if(cardValue != "Mélanger les cartes"){
     
                pairs.push(cardValue);
            }
    }
    Tu crois que le problème pourrais venir de là

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    Une imbrication de click et mousedown est plutôt hasardeuse, non?

    Vérifie aussi la parenthèse de fin de tes gestionnaires d'événement et l'accolade de fin de tes fonctions...

  5. #5
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    De plus, je ne sais pas comment ni où tu appelles memocard mais en tout cas, le tableau est réinitialisé à chaque mousedown...

  6. #6
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2019
    Messages : 45
    Par défaut
    Voici mon code au complet.
    Si cela peux t'aider à m'aider

    Merci beaucoup !

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    const cardblocks = document.querySelectorAll('.cardblock');
    const cards = ["1", "1", "2", "2", "3","3", "4", "4", "5", "5","6", "6", "7", "7", "8","8", "9", "9", "10", "10"];
    const start = document.querySelector('#random');
    const scoreP1 = document.querySelector('.scoreP1');
    const scoreP2 = document.querySelector('.scoreP2');
    const woncardsP1 = document.querySelector('.woncardsP1');
    const woncardsP2 = document.querySelector('.woncardsP2');
    let joueur = 1;
    let pairs = [];
    let score1 = 0;
    let score2 = 0;
    let memocard = [];
     
    start.addEventListener('click', randomMix);
     
    function showCard(){
     
        document.addEventListener('mousedown', (e)=>{
            let clickcards = e.target.id;
            memocard.push(clickcards);
            document.getElementById(clickcards).style.color = "blue";
        });
     
     
     
    }
     
     
     
    function randomMix(){
        let cardscopy = cards.slice(0);
        let cardsrandom =[];
     
        while(cardsrandom.length < cards.length){
            cardsrandom.push(cardscopy.splice(Math.floor(Math.random() * cardscopy.length), 1)[0]);
        }
        for(i=0; i<cardsrandom.length; i++){
            console.log(cardblocks[i]);
            cardblocks[i].innerHTML = cardsrandom[i];
        }
     
        play();
    }
     
    function play(){
        document.addEventListener('click', (e)=>{
            let clickcards = e.target.id;
            let cardValue = document.getElementById(clickcards).innerHTML;
            showCard();
     
            if(cardValue != "Mélanger les cartes"){
     
                pairs.push(cardValue);
            }
     
            if(pairs.length>=2){
     
                if(pairs[0] === pairs[1]){
     
                    if(joueur == 1){
                        woncardsP1.innerHTML = pairs;
                        score1 +=1;
                        scoreP1.innerHTML = score1;
                        pairs = [];
     
                    }else{
                        woncardsP2.innerHTML = pairs;
                        score2 +=1;
                        scoreP2.innerHTML = score2;
                        pairs = [];
                    }
                    console.log("tu gagnes une paires !");
                    console.log("a toi de rejouer");
     
                }else{
                    if(joueur == 1){
                        joueur = 2;
                    }else{
                        joueur = 1;
                    }
                    console.log(`A ton tour joueur ${joueur}`);
                    pairs = [];
     
                }
            }
     
        })
    }

  7. #7
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut


    Il ne faut jamais mettre un gestionnaire d'événement dans une fonction à moins d'être absolument certain que cette fonction ne sera appelée qu'une seule fois.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

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

Discussions similaires

  1. Comportement Méthode Equals()
    Par olivier252 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 18/09/2019, 15h43
  2. Réponses: 2
    Dernier message: 14/03/2014, 10h27
  3. récapitulatif comportement méthode Dispose
    Par new_wave dans le forum Framework .NET
    Réponses: 0
    Dernier message: 28/08/2013, 13h10
  4. Question sur comportement méthode "clone"
    Par ctobini dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 14/12/2012, 14h14
  5. Méthode push dans un Array à plusieurs dimensions
    Par thibane dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 02/04/2008, 10h42

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