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 :

DOM et Javascript


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 71
    Points : 26
    Points
    26
    Par défaut DOM et Javascript
    Bonjour,

    Voici un petit script dans une page HTML qui sert de petit jeu du "plus ou moins".
    On tire un nombre aléatoire entre 1 et 10, on le devine, on a un score en nombre de coups et un temps calculé en secondes.

    Je dois remplir un tableau des 10 meilleurs joueurs classés selon le temps mis pour trouver le nombre cherché.

    Seulement, je ne sais pas comment faire pour le mettre à jour à chaque fois qu'un joueur a joué. (C'est dans le else où il y a le commentaire, "insérer le temps à la position i").

    Voici le code:

    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    <html>
     
    <head>
    <title>Mes premiers pas en Javascript : DOM et Javascript jeu du plus ou moins</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf8">
     
    <style type = "text/css">
    h2{
    color:#000080;
    text-align:center;
    }
    body{
    background-color: #778899;
    }
    p{
    color:#000080;
    }
    </style>
     
    <script type="text/javascript">
     
    tab = new Array(10);
     
    function init()
    {
    	for(var i=0;i<tab.length;i++){
    		tab[i] = new Object();
    		tab[i].Nom="....";
    		tab[i].Temps=1000;
    		tab[i].Nombre=1000; }
    }
     
    function aleatoire()
    {
    x = Math.floor(Math.random()*10); //Donne un nb entier aleatoire entre 1 et 10
    alert("X="+x);                     //Affiche le nombre à deviner
    cpt = 1;                           //compteur de coups
    var t1,t2;
    t1 = new Date;
     
    	do{
    		nbchaine=prompt("Donnez un nombre entier compris entre 1 et 10 ou stop pour terminer");
    		if (nbchaine == "stop") return;     //Si on rentre "stop" la fonction s'arrête
    		nombre = parseInt(nbchaine);       //Convertit la chaine en nombre
     
    		if(nombre > x){     //Si le nombre saisi est supérieur au nombre cherché x
    			          cpt++;
    				  alert("Raté, c'est plus petit !");
     
    			      }else{	
    					    if(nombre < x) {
    					    cpt++;					
    					    alert("raté, c'est plus grand !"); }	
    				   }
     
    			if(nombre == x){
                                    t2 = new Date;
    				alert("Bravo, vous avez trouvé ! Nombre de coups : "+cpt);
    				var temps=((t2.getTime()-t1.getTime())/1000);  //Donne le temps ecoule entre t1 et t2
    				alert("Temps écoulé en secondes :"+temps); 
    	                               }
     
     
     
    	} while (nombre != x);
     
    	for(var i=0;(i<tab.length)&&(temps>tab[i].Temps);i++){
    	if (i==tab.length)
    		{
    		alert("Désolé, pas dans le top 10 !");
    		}
    	else
    		{
    		// inserer temps dans le top 10 a la position i
     
    		}
    	}
     
    }
    </script>
    </head>
     
    <body onload="init()">
     
    <h2> Bienvenue au "JEU DU PLUS OU MOINS" </h2><br/>
    <p>Veuillez cliquer sur le bouton pour lancer le jeu : <button onclick="aleatoire()">Jouer</button></p><br/>
     
    <table summary="Tableau des joueurs" border=15px width=35% bgcolor=grey>
    <caption align=bottom>Tableau des meilleurs joueurs</caption>
    <thead> <!--Description des colonnes-->
    <tr>
    <th id="id1">Rang</th>
    <th id="id2">Nom</th>
     
    <th id="id3">Nombre</th>
    <th id="id4">Temps</th>
    </tr>
    </thead>
    <tbody>
    <tr>     <!--Remplissage des lignes-->
    <td headers="rang1">1</td>
    <td headers="nom1"> </td>
    <td headers="nombre1"> </td>
    <td headers="temps1"> </td>
     
    </tr>
    <tr>
    <td headers="rang2">2</td>
    <td headers="nom2"> </td>
    <td headers="nombre2"> </td>
    <td headers="temps2"> </td>
    </tr>
    <tr>
    <td headers="rang3">3</td>
    <td headers="nom3"> </td>
    <td headers="nombre3"> </td>
     
    <td headers="temps3"> </td>
    </tr>
    <tr>
    <td headers="rang4">4</td>
    <td headers="nom4"> </td>
    <td headers="nombre4"> </td>
    <td headers="temps4"> </td>
    </tr>
    <tr>
    <td headers="rang5">5</td>
    <td headers="nom5"> </td>
     
    <td headers="nombre5"> </td>
    <td headers="temps5"> </td>
    </tr>
    <tr>
    <td headers="rang6">6</td>
    <td headers="nom6"> </td>
    <td headers="nombre6"> </td>
    <td headers="temps6"> </td>
    </tr>
    <tr>
    <td headers="rang7">7</td>
     
    <td headers="nom7"> </td>
    <td headers="nombre7"> </td>
    <td headers="temps7"> </td>
    </tr>
    <tr>
    <td headers="rang8">8</td>
    <td headers="nom8"> </td>
    <td headers="nombre8"> </td>
    <td headers="temps8"> </td>
    </tr>
     
    <tr>
    <td headers="rang9">9</td>
    <td headers="nom9"> </td>
    <td headers="nombre9"> </td>
    <td headers="temps9"> </td>
    </tr>
    <tr>
    <td headers="rang10">10</td>
    <td headers="nom10"> </td>
    <td headers="nombre10"> </td>
     
    <td headers="temps10"> </td>
    </tr>
    </tbody>
    </table>
     
    </body>
     
    </html>
    Chaque case du tableau doit être identifié selon un identifiant unique.
    Donc pour remplir une case, il faut chercher l'objet possédant cet identifiant dans le DOM et modifier son champ .innerHTML mais je ne sais pas comment on fait ici.

    Merci.

  2. #2
    Membre régulier Avatar de yacine.dev
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Points : 88
    Points
    88
    Par défaut
    je recupere le tableau avec la fonction getElementById de l'obget document .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabloHtml=document.getElementById("idtabloHtml");
    avec cette ligne tu peux acceder n'importe quelle case de ton tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    alert("la valeur de la premiere cellule dans la premiere ligne du tableau 
    "+tabloHtml.rows[0].cells[0].firstChild.data);
    tu peux changer la valeur de cette cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabloHtml.rows[0].cells[0].firstChild.innerHTML="nouvelle valeur";

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 71
    Points : 26
    Points
    26
    Par défaut
    Oui désolé mais comment on récupère la valeur du temps, du score et le nom dans ce cas ?

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    j'ai du mal à voir le fonctionnement que tu envisages
    Qu'es-tu censé stocké dans l'array tab() ?

    C'est plutôt ton tableau HTML (<table>) que tu devrais parcourir pour ta comparaison, non ?
    Tu devrais remplacer l'attribut "header" par "id", ça te donnerait un moyen d'accéder directement à chaque cellule (et donc à son innerHTML) de manière plus conventionnelle via document.getElementById().

    Sinon, je sais pas si tu es déjà arrivé à faire fonctionner ta boucle, mais tu n'as pas du voir souvent le message "Désolé ..."
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	for(var i=0;(i<tab.length)&&(temps>tab[i].Temps);i++){
    	if (i==tab.length)
    		{
    		alert("Désolé, pas dans le top 10 !");
    		}
    	else
    		{
    		// inserer temps dans le top 10 a la position i
    		
    		}
    	}
    A+

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Sinon, pour insérer proprement une ligne dans un tableau, il suffit de lire la FAQ

    A+

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 71
    Points : 26
    Points
    26
    Par défaut
    Ok merci,j'ai fait ceci mais ça marche tjs pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    else            // inserer temps dans le top 10 a la position i
    		{
    		for(i=1;i<=10;i++){
    			var monid, noeud;
    			monid="temps"+i;
    			noeud=document.getElementById(monid);
    			noeud.innerHTML=""+tab[i].temps; }
    		}

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Arf

    Ca fonctionnerait mieux avec un array() à 2 dimensions un peu plus classique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	for(var i=0;i<tab.length;i++){
    		tab[i] = new Array();
    		tab[i][0]="....";
    		tab[i][1]=1000;
    		tab[i][2]=1000; }
    A+

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 71
    Points : 26
    Points
    26
    Par défaut
    non c'est bon ça fonctionne bien comme ça mais par contre le tri ne marche pas, c'est à dire décaler les valeurs du tableau vers le bas lorsqu'un joueur a fait un meilleur temps:

    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
    else            // inserer temps dans le top 10 a la position i
    		{
    		for(i=0;i<tab.length:i++){
    			for(j=9;j>i;j--){
    				tab[j].Temps=tab[j-1].Temps;
    				tab[j].Nom=tab[j-1].Nom;
    				tab[j].Nombre=tab[j-1].Nombre;
    					}
    			tab[i].Temps=temps;
    			tab[i].Nom=nom;
    			tab[i].Nombre=cpt;
    					}
    		for(i=1;i<=10;i++){
    			var monid="temps"+i;
    			var monid1="nom"+i;
    			var monid2="nombre"+i;
    			noeud=document.getElementById(monid);
    			noeud.innerHTML=""+tab[i-1].Temps;
    			noeud1=document.getElementById(monid1);
    			noeud1.innerHTML=""+tab[i-1].Nom;
    			noeud2=document.getElementById(monid2);
    			noeud2.innerHTML=""+tab[i-1].Nombre;
     				  }
    		}

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par fredericbdr Voir le message
    non c'est bon ça fonctionne bien comme ça
    Ben pour mon IE8, c'est ce qui provoquait une erreur.

    Vérifie que ton nav te signale bien toutes les erreurs de script ...

    A+

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par fredericbdr Voir le message
    décaler les valeurs du tableau vers le bas lorsqu'un joueur a fait un meilleur temps
    Ben oui, mais ça tu n'en auras pas besoin : tout sera déjà stocké dans ton tableau (HTML), à terme ...

    A+

Discussions similaires

  1. [DOM] IDE Javascript avec completion intelligente
    Par nicorama dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/03/2008, 19h42
  2. [DOM et JAVASCRIPT] comment iterer sur un noeud
    Par AliJava dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/12/2007, 09h24
  3. [DOM] fonction javascript dans html
    Par nopnop dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/04/2007, 09h53
  4. [DOM] Probleme JAVASCRIPT XML STRING DOM
    Par seb0634 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 05/11/2006, 17h53

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