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 :

G�n�rer un calendrier


Sujet :

JavaScript

  1. #1
    Membre �prouv�
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par d�faut G�n�rer un calendrier
    bonjour,

    avant de me lancer j'essaie quelque chose de tr�s simple mais �a marche pas !!
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function afficher_cal(){
    	document.getElementById('madiv').innerHTML = "<table border=1> <tr>";
    	document.getElementById('madiv').innerHTML = "<td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td>";
    	document.getElementById('madiv').innerHTML = "</tr></table>";
    }
    </SCRIPT>
     
    bouton pour afficher le tableau <input type='button' name='voir_cal' value='calendar' onclick='javascript:afficher_cal()';>
     
    <div id="madiv" style="width:15em;height:10em;background-color:yellow;">
     
     
    </div>
    et comme dirait un chanteur : il est o� le probl�me ?

    merci

  2. #2
    Expert confirm�
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par d�faut
    Utilise l�inspecteur avec la touche F12 et je pense que tu verras vite le probl�me
    En principe tu devrais voir que ta div contient seulement </tr></table>. C�est parce que chacune de tes d�clarations .innerHTML = … �crase la pr�c�dente.

    Pour corriger le probl�me, construis une cha�ne avec + et passe-la en une seule fois � innerHTML.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    function afficher_cal() {
      document.getElementById('madiv').innerHTML = "<table border=1> <tr>" + 
        "<td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td>" +
        "</tr></table>";
    }
    Ou mieux, utilise la m�thode insertAdjacentHTML.

    Et supprime le "javascript:" de ton onclick. C�est une syntaxe obsol�te et �a fonctionne sans.
    La FAQ JavaScript � Les cours JavaScript
    Touche F12 = la console → l�outil indispensable pour d�velopper en JavaScript !

  3. #3
    Expert confirm�
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par d�faut
    En bonus, la version � propre �, c�est-�-dire o� les codes HTML, JS et CSS sont bien s�par�s.

    Code HTML : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <!DOCTYPE html>
    <html lang="fr">
    <head>
      <meta charset="utf-8">
      <title>Philippef</title>
      <link rel="stylesheet" href="style.css">
      <script src="script.js"></script>
    </head>
    <body>
      Bouton pour afficher le tableau
      <input type="button" name="voir_cal" value="calendar">
      <div id="madiv"></div>
    </body>
    </html>
    Code CSS : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @charset "utf-8";
     
    #madiv { width: 15em;
             height: 10em;
             background-color: yellow;
    }
    #madiv table { border-width: 1px;
                   border-style: outset;
    }
    #madiv th, #madiv td { border-width: 1px;
                           border-style: inset;
    }
    Code JS : 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
    'use strict';
     
    var madiv;
     
    function afficher_cal() {
      madiv.innerHTML = '';
     
      var table = document.createElement('table');
      var row = table.insertRow();
      var cell;
      for (var i = 1; i <= 7; i++) {
        cell = row.insertCell();
        cell.textContent = i;
      }
     
      madiv.appendChild(table);
    }
     
    document.addEventListener('DOMContentLoaded', function () {
      madiv = document.getElementById('madiv');
     
      document.querySelector('input[name="voir_cal"]')
        .addEventListener('click', afficher_cal);
    });
    La FAQ JavaScript � Les cours JavaScript
    Touche F12 = la console → l�outil indispensable pour d�velopper en JavaScript !

  4. #4
    Membre �prouv�
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par d�faut
    Merci beaucoup !!
    j'�tais et suis encore loin de tout �a !!
    mon but c'est de cr�er un calendrier cliquable.
    j'avais r�cup�r� un code mais bien sur �a ne marche pas.
    j'ai donc compl�t� ce code pour pouvoir changer les mois. Bien sur ce n'est pas ce qu'il y a de mieux mais �a marche.

    le code javascript : permet d'afficher le nom du mois et l'ann�e quand on clique sur les boutons "<" et ">"
    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
     
    function next(gen){
    	var numero = parseInt(document.gen.mois_encours.value);
    	var numerofin = 12;
    	var an = parseInt(document.gen.annee.value);
    	if (numero < numerofin){
    		var numero = ++numero ;
    		document.gen.mois_encours.value= +numero;
    	}
    	else if (numero = numerofin){
    		document.gen.mois_encours.value= 1;
    		var an = ++an ;
    		document.gen.annee.value= +an;
    		numero = 1;
    	}
    	var le_mois =["","janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"];
    	var valeur = le_mois[numero];
    	document.gen.an.value= valeur.concat(' ').concat(+an);
    }
    function previous(gen){
    	var numero = parseInt(document.gen.mois_encours.value);
    	var numerofin = 12;
    	var an = parseInt(document.gen.annee.value);
    	if (numero > 1){
    		var numero = --numero ;
    		document.gen.mois_encours.value= +numero;
    	}
    	else if (numero = numerofin){
    		document.gen.mois_encours.value= 12;
    		var an = --an ;
    		document.gen.annee.value= +an;
    		numero = 12;
    	}
    	var le_mois =["","janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"];
    	var valeur = le_mois[numero];
    	document.gen.an.value= valeur.concat(' ').concat(+an);
    }
    function le_jour(el){
    	var day = el.innerHTML;
    	var month = document.gen.mois_encours.value;
    	var year = document.gen.annee.value;
    	if ((day < 10) && (month < 10)){ 
    		document.gen.date_selected.value = '0'+day +'/' +'0' +month +'/' +year;
    		document.gen.date_selected_en.value = +year +'-' +'0' +month +'-' +'0' +day;
    	}
    	else if ((day < 10) && (month > 9)){ 
    		document.gen.date_selected.value = '0'+day +'/' +month +'/'+year;
    		document.gen.date_selected_en.value = +year +'-' +month +'-' +'0'  +day;
    	}
    	else if ((day > 9) && (month < 10)){ 
    		document.gen.date_selected.value = +day +'/' +'0' +month +'/'+year;
    		document.gen.date_selected_en.value = +year +'-' +'0' +month +'-'+day;
    	}
    	else {
    		document.gen.date_selected.value = +day +'/' +month +'/'+year;
    		document.gen.date_selected_en.value = +year +'-'+month +'-'+day;
    	}
    }
    function Njours(gen){
    	var mois_js = parseInt(document.gen.mois_encours.value);
    	var anne_js = parseInt(document.gen.annee.value);
    	target = new Date(anne_js,mois_js,0);
    	nbJour = target.getDate(); // donne le nombre de jours dans le mois sélectionné
    	document.gen.nbjjs.value = nbJour;
    }

    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
     
    <?php
    $jour = date('d');
    $mois = date('m');
    $anne = date('Y');
    $mois_fr = Array("", "janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre");
    list($nom_jour, $jour, $mois, $annee) = explode('/', date("w/d/n/Y"));
    ?>
    <FORM NAME="gen" >
    <!---
    mois en cours  <INPUT type="text" name="mois_encours" value= "<?php echo $mois; ?>"><br />
    année <INPUT type="text" name="annee" value="<?php echo $anne;?>"><br />
    nb jours dans le mois <input type="text" name ="nbjjs" value="<?php echo $nbjour;?>"><br />
    date pour bdd <INPUT type="text" name="date_selected_en" value=""><br /><br />--->
     
    Votre date <INPUT type="text" name="date_selected" value=""><br />
    <!---################################################################################################ --->
    <!--- en tête du tableau contenant "1 bouton < cliquable", le mois et l'année, "1 bouton > cliquable" --->
     
    <table border =1 style="border-collapse:collapse;font-family:verdana;width:12.4em;">
    	<tr><td><input type='button' name='bouton' value='<' onclick='javascript:previous(gen),Njours(gen)'; style='cursor:pointer;'></td>
    	<td><input type='text' name='an'  style='text-align:center;border:none;' size=16em value='<?php echo $mois_fr[$mois]; echo " $anne";?>'></td>
    	<td><input type='button' name='bouton' value='>' onclick='javascript:next(gen),Njours(gen)'; style='cursor:pointer;'></td></tr>
    </table>
    <!--- la ligne contenant les jours de la semaine --->
    <table border =1 style="border-collapse:collapse;font-family:verdana;font-size:0.84em;width:12.4em">
    	<tr><td class='plein'>Lun</td><td class='plein'>Mar </td><td class='plein'>Mer </td><td class='plein'>Jeu </td><td class='plein'>Ven </td><td class='plein'>San </td><td class='plein'>Dim </td></tr>
    et enfin le tableau des jour du calendrier. Le probl�me c'est qu'il est �crit en php !! Je voudrais avoir le m�me r�sultat mais avec javascript. J'ai regarder depuis xx jours je n'y arrive pas
    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
     
    <?php
    for ($i = 1; $nbjour >= $i; $i++){
    	$p = cal_to_jd(CAL_GREGORIAN, $mois, $i, $anne); // formater jour
    	$jourweek = jddayofweek($p); // jour de la semaine
    	if($i == $nbjour){  //si c'est le dernier jour du mois
    		if($jourweek == 1){	//si c'est un lundi on ouvre une ligne
    			echo "<tr>";
    		}
    		if ($i == $jour){
    			echo "<td class='plein' onclick='javascript:le_jour(this)';><b>".$i."</b></td></tr>"; // on écrit la date en gras
    		}
    		else {
    			echo "<td class='plein' onclick='javascript:le_jour(this)';>".$i."</td></tr>"; 
    		}
    	}
    	else if($i == 1){ // si c'est le premier jour du mois
    		echo "<tr>"; //  on ouvre la ligne
    		if($jourweek == 0){  // si c'est un dimanche 
    			$jourweek = 7; // on affecte 7 à la variable $jourweek
    		}
    		for($b = 1 ;$b != $jourweek; $b++){  // on ajoute les cases vides devant le premier jour tant que la variable $b < à 7
    			echo "<td class='vide'></td>";
    		}
    		echo "<td class='plein' onclick='javascript:le_jour(this)';>".$i."</td>";
    		if($jourweek == 7){ // si le jour est un dimanche on ferme la ligne
    			echo "</tr>";
    		}
    	}
    	else{
    		if($jourweek == 1){ // si le jour de la semaine est un lundi on ouvre une ligne
    			echo "<tr>";
    		}
    		if ($i == $jour){ // si $i = la date du jour on écrit la date en gras
    			echo "<td class='plein' onclick='javascript:le_jour(this)';><b>".$i."</b></td>";
    		}
    		else { //si la variable $i # de la date du jour on ne met pas en gras
    			echo "<td class='plein' onclick='javascript:le_jour(this)';>".$i."</td>";
    		}
    		if($jourweek == 0){ // si c'est un dimanche on ferme la ligne
    			echo "</tr>";
    		}
    	}
    }
    ?>
    </table>
    </FORM>
    </div>
    un peu (beaucoup !) d'aide m'irai bien
    (ne pas trop croire l'attribut que l'on me donne !!)

  5. #5
    Expert confirm�
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par d�faut
    Waaaah� J�ai mis un moment � comprendre � quoi sevaient ces appels � cal_to_jd et jddayofweek

    Rassure-toi, pour obtenir le num�ro du jour dans la semaine en JavaScript, c�est bien plus simple : c�est une m�thode de l�objet Date : getDay.

    Le reste du script PHP est facile � convertir je pense, je vais te laisser chercher un peu. Tu peux recourir � la m�thode innerHTML que tu utilises d�j�, ou sa variante plus efficace insertAdjacentHTML dont je t�ai d�j� parl�. Ou sinon tu peux utiliser les m�thodes du DOM, notamment :


    Tu peux voir un exemple d�utilisation de ces m�thodes dans le code � propre � que je t�ai donn�.
    La FAQ JavaScript � Les cours JavaScript
    Touche F12 = la console → l�outil indispensable pour d�velopper en JavaScript !

  6. #6
    Membre �prouv�
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par d�faut
    J'ai regard� du cot� de getDate.
    Comme je veux faire un tableau des jours du mois quand on clique j'ai besoin de r�cup�rer la valeur du premier jour du mois.
    Pour le moment j'ai ceci dans la fonction pour avoir le nombre de jour du mois et le num�ro du jour de la semaine du mois
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function Njours(gen){
    	var mois_js = parseInt(document.gen.mois_encours.value);
    	var anne_js = parseInt(document.gen.annee.value);
    	target = new Date(anne_js,mois_js,0);
    	nbJour = target.getDate(); // donne le nombre de jours dans le mois sélectionné
    	document.gen.nbjjs.value = nbJour;
    	var madate = new Date("Feb-1-2017");
    	var nJour = madate.getDay();
    	document.gen.premierjourmois.value = nJour;
    }
    je pense �tre sur la piste et je continue de chercher !!

  7. #7
    Expert confirm�
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par d�faut
    Attention avec le constructeur Date, les mois commencent � z�ro mais les jours commencent � un.

    Cf. la doc :
    mois
    Valeur d'un entier repr�sentant le mois, commen�ant � partir de 0 pour Janvier jusqu'� 11 pour D�cembre.

    jour
    Param�tre optionnel. Un entier repr�sentant le jour du mois (1-31).
    En mettant z�ro tu te retrouves avec le dernier jour du mois pr�c�dent. Peut-�tre voulais-tu faire target = new Date(anne_js, mois_js + 1, 0) ?


    Une remarque avec parseInt : il y a un pi�ge avec les nombres commen�ant par z�ro (une situation qui est susceptible d�arriver quand on manipule des dates). Sous d�anciens navigateurs, il ne les interpr�te pas de fa�on attendue : pour une raison que j�ignore (sans doute un h�ritage du langage C), il les interpr�te en octal (base 8), ainsi les valeurs '08' et '09' (correspondant aux mois de septembre et octobre) sont consid�r�es comme invalides et renvoient z�ro.
    Pour cette raison il est conseill� de toujours forcer la base d�cimale en ajoutant un second param�tre :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    var mois_js = parseInt(document.gen.mois_encours.value, 10);
    var anne_js = parseInt(document.gen.annee.value, 10);
    Voir parseInt.
    La FAQ JavaScript � Les cours JavaScript
    Touche F12 = la console → l�outil indispensable pour d�velopper en JavaScript !

  8. #8
    Membre �prouv�
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par d�faut
    Merci pour les informations.
    C'est vrai que j'ai un peu gal�r� avec les num�ros de mois et de jours mais voil� o� je suis arriv�.
    j'ai test� plusieurs fois et �a marche !! Je suis s�r que pour les "pro" il y a certainement mieux.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function Njours(gen){
    	var mois_js = parseInt(document.gen.mois_encours.value);
    	var mois = mois_js -1;
    	var anne_js = parseInt(document.gen.annee.value);
    	var jour_js = "1";
    	target = new Date(anne_js,mois_js,0);
    	nbJour = target.getDate(); // donne le nombre de jours dans le mois sélectionné
    	document.gen.nbjjs.value = nbJour;
    	target = new Date(anne_js,mois,1);
    	var madate = new Date(anne_js,mois_js,1);
    	var FirstD = target.getDay(madate);
    	document.gen.premierjourmois.value = FirstD; // donne le 1er jour du mois dimanche=0, lundi=1, mardi=2 ...
    }
    Maintenant je vais m'attaquer � la construction du tableau en fonction du mois et du 1er jour du mois.
    je vais essayer essayer d'utiliser le code que tu m'as donn�.
    Les prochaines recommandations sont les bienvenues !!

  9. #9
    Membre �prouv�
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par d�faut
    @Watilin,
    Rien � faire, j'ai beau chercher et essayer rien ne marche !!
    Je n'arrive pas � ins�rer une ligne dans le tableau de la fonction que tu m'as donn�e.
    Et je ne mets m�me pas mes tentatives puisque rien ne fonctionne.
    Je pense qu'avec ce code j'arriverai � cr�er le tableau entier. Enfin j'esp�re.

    Merci

  10. #10
    Expert confirm�
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par d�faut
    Sois m�thodique.
    Tu sais que tu dois construire un tableau qui a toujours 7 cellules par ligne. � partir de l� tu peux choisir entre deux approches :
    • soit tu fais comme c��tait fait dans le code PHP, c�est-�-dire une seule boucle, et toutes les 7 cellules tu cr�es un nouvelle ligne ;
    • soit tu fais deux boucles imbriqu�es, une pour les lignes et une pour les cellules de chaque ligne.


    Les donn�es que tu as d�j� calcul�es (le nombre de jours dans le mois, et la position dans la semaine du premier jour du mois) te permettent de savoir combien de cases vides mettre au d�but et � la fin du tableau.

    Un petit exemple de cr�ation de tableau avec les m�thodes DOM :
    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
    'use strict';
     
    var i, j;
    var row, th, cell;
    var table = document.createElement('table');
     
    //
    // création des têtes de colonnes
    //
    var thead = table.createTHead();
    row = thead.insertRow();
    var nomsJours = [ 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa', 'Di' ];
    for (i = 0; i < 7; i++) {
      th = document.createElement('th'); // malheureusement, il n’y a pas de méthode insert pour les th
      th.textContent = nomsJours[i];
      th.scope = 'col'; // optionnel, pour l’accessibilité
      row.appendChild(th);
    }
     
    //
    // création du contenu
    //
    var tbody = table.createTBody();
    for (j = 0; j < 5; j++) {
      row = tbody.insertRow();
      for (i = 0; i < 7; i++) {
        cell = row.insertCell();
        cell.textContent = '(' + i + ',' + j + ')';
      }
    }
     
    document.body.appendChild(table);
    La FAQ JavaScript � Les cours JavaScript
    Touche F12 = la console → l�outil indispensable pour d�velopper en JavaScript !

  11. #11
    Membre �prouv�
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par d�faut
    J'ai avanc� encore un peu. j'arrive � afficher le nombre de jours en fonction du mois !!
    Oui bien s�r �a commence toujours le lundi ... pour le moment !!
    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
     
    	var firstD = parseInt(document.gen.premierjourmois.value); //le jour de la semaine lundi=1, mardi=2,... dimanche=0
    	var lastD = parseInt(document.gen.nbjjs.value); // dernier jour du mois
    	lastD = lastD +1;
    	var tbody = table.createTBody();
     
    	for (j = 1; j < lastD; j){
    		row = tbody.insertRow();
    		for (i = 1; i < 8; i++) {
    			if (j < lastD ){
    				cell = row.insertCell();
    				cell.textContent = j;
    			}
    			j = j + 1;
    		}
    	}
    Le probl�me c'est qu'� chaque clic pour avoir le mois suivant ou le mois pr�c�dent, c'est une table en plus qui s'affiche.
    J'ai cherch� comment supprimer la table avant d'�crire la nouvelle table mais je n'ai trouv� que object.deleteRow();
    Donc j'imagine que je dois faire une boucle pour supprimer mes 5 lignes !! Je n'ai pas essayer.

  12. #12
    Expert confirm�
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par d�faut
    Pour �viter d�avoir des tables qui se multiplient, tu peux d�tecter si un <tbody> est pr�sent, et le cas �ch�ant, le supprimer.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    var existingTBody = table.querySelector('tbody');
    if (existingTBody) table.removeChild(existingTBody);
    Pour faire commencer le mois un autre jour qu�un lundi, il m�a sembl� pratique de commencer par des jours n�gatifs (mais parfois j�ai une fa�on de raisonner un peu anormale). En clair, si la semaine commence un mardi, tu dois faire � reculer � le premier jour de 1, pour un mercredi, de 2, etc.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    lundi      0
    mardi     -1
    mercredi  -2
    jeudi     -3
    vendredi  -4
    samedi    -5
    dimanche  -6
    Il y a donc une petite conversion � faire � partir de la valeur donn�e par .getDay(). Je te laisse chercher
    La FAQ JavaScript � Les cours JavaScript
    Touche F12 = la console → l�outil indispensable pour d�velopper en JavaScript !

  13. #13
    Membre �prouv�
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par d�faut
    donc pour le moment le calendrier qui s'affiche correspond bien au jour du d�but du mois s�lectionn� janvier = dimanche (0), f�vrier = mercredi (3) ...
    par contre les calendriers se placent l'un sous l'autre. je n'arrive pas � supprimer celui qui s'affiche au moment du clic pour le mois suivant.
    lorsque je place
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    var existingTBody = table.querySelector('tbody');
    if (existingTBody) table.removeChild(existingTBody);
    aucun calendrier ne s'affiche.

    voici le code complet de la page. Je sais que je dois encore simplifier le code mais pour le moment je veux aller au bout avant.
    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
     
    'use strict';
     
    function afficher_cal(){
     
    	var i, c;
    	var row, td, cell;
    	var table = document.createElement('table');
     
    	table.border = '1';
    	table.style.fontSize = '0.83em';
    	table.style.fontFamily = 'verdana';
    	table.style.borderCollapse = 'collapse';
    	table.style.textAlign = 'center';
    //
    // création des têtes de colonnes
    //
    	var thead = table.createTHead();
    	row = thead.insertRow();
    	var nomsJours = [ 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam', 'Dim' ];
    	for (i = 0; i < 7; i++) {
    		td = document.createElement('td'); // malheureusement, il n’y a pas de méthode insert pour les th
    		td.textContent = nomsJours[i];
    		td.scope = 'col'; // optionnel, pour l’accessibilité
    		row.appendChild(td);
    	}
    //
    // création du contenu
    //
    	var firstD = parseInt(document.gen.premierjourmois.value); //le jour de la semaine lundi=1, mardi=2,... dimanche=0
    	var lastD = parseInt(document.gen.nbjjs.value); // donne le nombre de jours (et le dernier) jour du mois
    	lastD = lastD + 1;
     
    	c = 1; 
    	var tbody = table.createTBody();
    	if (firstD == 1){	// 1er jour du mois = lundi
    		row = tbody.insertRow();
    		for (c = 1; c < lastD; c){
    			row = tbody.insertRow();
    			for (i = 1; i < 8; i++) {
    				if (c < lastD ){
    					cell = row.insertCell();
    					cell.textContent = c;
    				}
    				c = c + 1;
    			}
    		}			
     	}
    	if (firstD == 2){	// 1 er jour du mois = mardi
    		row = tbody.insertRow();
    		for (i = 1; i < 2; i++){
    			cell = row.insertCell();
    			cell.textContent = '';
    		}
    		for (i = 2; i < 8; i++){
    			cell = row.insertCell();
    			cell.textContent = c;
    			c = c + 1;
    		}
    		for (c = 7; c < lastD; c){
    			row = tbody.insertRow();
    			for (i = 1; i < 8; i++) {
    				if (c < lastD ){
    					cell = row.insertCell();
    					cell.textContent = c;
    				}
    				c = c + 1;
    			}
    		}			
     	}
    ....
    	document.body.appendChild(table);
     
    }
    document.addEventListener('DOMContentLoaded', function () {
      madiv = document.getElementById('madiv');
     
      document.querySelector('input[name="voir_cal"]')
        .addEventListener('click', afficher_cal);
    });
    j'ai cherch� pendant un bon bout de temps ce qui suit mais sans r�sultat
    je voudrais aussi pouvoir ajouter un clic sur une date pour r�cup�rer la valeur.
    et mettre en gras la date du jour.

  14. #14
    Expert confirm�
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par d�faut
    Je t�ai induit en erreur avec mon dernier message, je pensais que tu n�avais qu�une seule <table> dans ta page et que tu cr�ais dynamiquement les <tbody>. En fait tu cr�es dynamiquement les tables, donc c�est �a que tu dois v�rifier :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    var existingTable = document.querySelector('table');
    if (existingTable) existingTable.parentElement.removeChild(existingTable);
    Sinon, tu avais un probl�me avec mes <th> ? Si c�est le style centr� gras qui te d�range, n�oublie pas que ce n�est que l�apparence par d�faut. Tout �a se g�re par CSS.
    D�ailleurs � propos de �a, tu triches en rajoutant du CSS sur ta table via JavaScript. Mets une d�claration CSS dans un fichier CSS une bonne fois pour toutes, et au besoin utilise des class ou des id.

    Dans ton code tu as 7 boucles for qui font presque exactement la m�me chose. Tu dois te douter qu�il y a quelque chose qui cloche �a peut se factoriser si tu utilises la variable firstD ailleurs que dans les if.

    Pour mettre la case du jour en gras, je te propose de pr�voir � cet effet une classe CSS :
    Code CSS : S�lectionner tout - Visualiser dans une fen�tre � part
    .today { font-weight: bold; }
    Pour �viter de g�rer les styles directement dans le code JS, puisque ce n�est pas le r�le de JS. On appelle �a le principe d�orthogonalit�.
    Et ensuite, aux environs de cette (ces) ligne(s) :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
      …
      cell.textContent = c;
      …
    Rajoute ce bloc :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
      if (c === today) {
        cell.classList.add('today');
      }
    En ayant au pr�alable d�clar� var today = new Date().getDate(); plus haut dans le script.


    Pour r�cup�rer l�info de la date de chaque cellule, dans tous les cas �a va commencer par un gestionnaire d��v�nement 'click'. Tu peux ajouter autant de gestionnaires qu�il y a de cellules, ou bien d�l�guer � un �l�ment parent, par exemple le <tbody> ou la <table>.

    Pour traiter un �v�nement � d�l�gu� �, il suffit d�examiner la nature de l�objet event.target.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    tbody.addEventListener('click', function (event) {
      if ('TD' === event.target.tagName) {}
    });
    Et � partir de l� tu r�cup�res event.target.textContent et tu es en mesure de bidouiller avec pour reconstruire une date compl�te.
    La FAQ JavaScript � Les cours JavaScript
    Touche F12 = la console → l�outil indispensable pour d�velopper en JavaScript !

  15. #15
    Membre �prouv�
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par d�faut
    Merci pour tout �a.
    Entre temps j'avais cogit� et trouv� pour mettre en gras la date du jour.
    pour le reste je vais regard� tout �a de pr�s.
    encore merci

  16. #16
    Membre �prouv�
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par d�faut
    Malgr� les heures je n'arrive toujours pas � utiliser la fonction C'est la chose qui me manque pour finaliser ce calendrier.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    tbody.addEventListener('click', function (event) {
      if ('TD' === event.target.tagName) {}
    });
    le script :
    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
     
    'use strict';
     
    function afficher_cal(){
     
    	var existingTable = document.querySelector('table');
    	if (existingTable) existingTable.parentElement.removeChild(existingTable);
     
    	var ladate = new Date();	
    	var ladatedujour = ladate.getDate();// la date du jour
    	var lemois = ladate.getMonth() ;
    	lemois = lemois + 1;
    	var i, c;
    	var row, td, cell;
    	var table = document.createElement('table');
    //
    // création des têtes de colonnes
    //
    	var thead = table.createTHead();
    	row = thead.insertRow();
    	var nomsJours = [ 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam', 'Dim' ];
    	for (i = 0; i < 7; i++) {
    		td = document.createElement('td'); // malheureusement, il n’y a pas de méthode insert pour les th
    		td.textContent = nomsJours[i];
    		td.scope = 'col'; // optionnel, pour l’accessibilité
    		row.appendChild(td);
    	}
    //
    // création du contenu
    //
    	var firstD = parseInt(document.gen.premierjourmois.value); //le jour de la semaine lundi=1, mardi=2,... dimanche=0
    	var lastD = parseInt(document.gen.nbjjs.value); // donne le nombre de jours (et le dernier) jour du mois
    	lastD = lastD + 1;
    	var actualMonth = parseInt(document.gen.mois_encours.value); // 
     
    	c = 1; 
    	var tbody = table.createTBody();
    	row = tbody.insertRow();
    	if (firstD == 0){
    		for (i = 1; i < 7; i++) {
    			cell = row.insertCell();
    			cell.textContent = '';
    			cell.classList.add('couleurvide');
    		}
    		cell = row.insertCell();
    		cell.textContent = c;
    		cell.classList.add('curseur');
    		if ((c == ladatedujour) && (actualMonth == lemois)){
    			cell.classList.add('ladatedujour');
    		}
    		c = c + 1;		
    	}
    	else if (firstD == 1){
    		for (i = firstD; i < 8; i++) {
    			cell = row.insertCell();
    			cell.textContent = c;
    			cell.classList.add('curseur');
    			if ((c == ladatedujour) && (actualMonth == lemois)){
    				cell.classList.add('ladatedujour');
    			}
    			c = c + 1;
    		}			
    	}
    	else {
    		for (i = 1; i < firstD; i++) {
    			cell = row.insertCell();
    			cell.textContent = '';
    			cell.classList.add('couleurvide');
    		}
    		for (i = firstD; i < 8; i++) {
    			cell = row.insertCell();
    			cell.textContent = c;
    			cell.classList.add('curseur');
    			if ((c == ladatedujour) && (actualMonth == lemois)){
    				cell.classList.add('ladatedujour');
    			}
    			c = c + 1;
    			c = c + 1;
    		}			
    	}
    	for (c = c; c < lastD; c){
    		row = tbody.insertRow();
    		for (i = 1; i < 8; i++){
    			if ( c < lastD){
    				cell = row.insertCell();
    				cell.textContent = c;
    				cell.classList.add('curseur');
    				if ((c == ladatedujour) && (actualMonth == lemois)){
    					cell.classList.add('ladatedujour');
    				}
    				c = c + 1;
    			}
    		}
    	}		
     
    	document.body.appendChild(table);
     
    }
    document.addEventListener('DOMContentLoaded', function () {
      madiv = document.getElementById('madiv');
     
      document.querySelector('input[name="voir_cal"]')
        .addEventListener('click', afficher_cal);
     
     
    });
    question subsidiaire : Ce calendrier est destin� � �tre plac� 2 pages d'un site. Sur ces 2 pages il y a tableau. Etant donn� que le calendrier efface les tableaux, comment r�soudre ce probl�me ?
    par une indexation des tableaux ? par inclusion de la page du calendrier sur chacune des pages du site ?
    Merci d'avance

  17. #17
    Expert confirm�
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par d�faut
    Tu peux utiliser un id si tu consid�res que la table doit �tre d�j� pr�sente dans le HTML pur (sans l�intervention de JS). Mais �a n�a pas beaucoup de sens vu que la construction du calendrier d�pend de JS.

    � la place, je propose une simple variable globale.
    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
    'use strict';
     
    function afficher_cal() {
      var ladate = new Date();
      var ladatedujour = ladate.getDate();
      var lemois = ladate.getMonth() + 1;
      var i, c;
      var row, th, abbr, cell;
      var thead, tbody;
     
      if (!calendrier) { // premier appel
        calendrier = document.createElement('table');
        document.body.appendChild(calendrier);
     
        // création des entêtes une fois pour toutes lors du premier appel
        // avec noms entiers des jours en infobulle
        var thead = table.createTHead();
        row = thead.insertRow();
        var nomsJours = [
          { nomCourt: 'Lun', nomLong: 'Lundi'    },
          { nomCourt: 'Mar', nomLong: 'Mardi'    },
          { nomCourt: 'Mer', nomLong: 'Mercredi' },
          { nomCourt: 'Jeu', nomLong: 'Jeudi'    },
          { nomCourt: 'Ven', nomLong: 'Vendredi' },
          { nomCourt: 'Sam', nomLong: 'Samedi'   },
          { nomCourt: 'Dim', nomLong: 'Dimanche' }
        ]; // https://youtu.be/QF9lUh5XPxo
     
        for (i = 0; i < 7; i++) {
          // j’ai repris les th, c’est quand même plus approprié pour des entêtes
          th = document.createElement('th');
          th.scope = 'col';
          abbr = document.createElement('abbr');
          abbr.textContent = nomsJours[i].nomCourt;
          abbr.title       = nomsJours[i].nomLong;
          th.appendChild(abbr);
          row.appendChild(th);
        }
      }
     
      // ici, thead existe forcément, mais tbody pas nécessairement
      tbody = calendrier.querySelector('tbody');
      if (!tbody) {
        // s’il n’existe pas, on le crée…
        tbody = calendrier.createTBody();
        // … et on lui ajoute le gestionnaire d’évènement des <td>
        tbody.addEventListener('click', function (event) {
          if ('TD' === event.target.tagName) {
            console.log(event.target.textContent);
          }
        });
      }
      else {
        // s’il existe, on le vide
        tbody.innerHTML = '';
      }
     
      //
      // … le remplissage des cellules ne change pas
      //
     
      // pas de appendChild à la fin, on l’a fait au début
    }
    Juste un truc : attention aux comparaisons � == � et � != � en JS et en PHP : ce sont des comparaisons laxistes, elles ne v�rifient pas les types et effectuent des conversions implicites. �a donne des r�sultats erratiques dans de nombreux cas. Utilise syst�matiquement les comparaisons strictes � === � et � !== � et tu n�auras jamais de probl�me avec �a.

    Il y a quelques autres petits trucs � retoucher dans ton code, par exemple c = c + 1; c = c + 1; qui peut se r�duire en c += 2;. Et n�oublie pas le second argument de parseInt.
    La FAQ JavaScript � Les cours JavaScript
    Touche F12 = la console → l�outil indispensable pour d�velopper en JavaScript !

  18. #18
    Membre �prouv�
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par d�faut
    J'ai modifi� tous les signes == en === et j'ai remplac� c = c + 1 par c += 1. Concernant c = c + 1, c = c + 1 c'�tait une erreur
    J'ai tenu compte de tes observations pour le d�but de la fonction. Probl�me, plus rien ne s'affiche.
    Pour la partie css ce qui me g�ne c'est que tous les styles de la table vont �tre appliqu�s � toutes les tables (7) du site !!
    Est ce qu'il ne faut pas remettre la table du calendrier dans un balise <div> avec un id comme cela avait fait?

    le code de la page index. Les styles encore sur cette page seront plac�s dans le fichier css
    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
     
    <!DOCTYPE html>
    <html lang="fr">
    <head>
      <meta charset="utf-8">
      <title>Philippef</title>
      <link rel="stylesheet" href="style.css">
      <script src="script.js"></script>
    </head>
    <body >
     
    <?php
     
    $numjour = date('w'); // numéro du jour de la semaine 0 = dimanche ... 6 pour samedi
    $numjourl= date('N'); // numéro du jour de la semaine 1 = lundi ...7 pour dimanche
    $nomjour = date('D'); // nom du jour en enaglais sur 3 caratères
    $jour = date('d');
    $mois = date('m');
    $anne = date('Y');
     
    $mois_fr = Array("", "janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre");
    list($nom_jour, $jour, $mois, $annee) = explode('/', date("w/d/n/Y"));
     
     
    $nbjour = cal_days_in_month(CAL_GREGORIAN, $mois, $anne); // nombre de jour dans le mois
    $p = cal_to_jd(CAL_GREGORIAN, $mois, 1, $anne); // formater jour
    $jourweek = jddayofweek($p); // jour de la semaine
    ?>
     
    <table id="toto">
    <tr><td>tata</td><td>machin</td></tr>
    </table>
     
    <FORM NAME="gen">
    	<p style="font-size:0.83em;font-family:verdana;background-color:yellow;width:21em;">
    		Sélectionnez vos dates de disponibilités<br /><br />
    		Début : <INPUT type="text" name="date_selected" value="" size=9em> 
    			<input type="button" name="voir_cal" value="cal" class='boutonCal' onclick="afficher_cal(),voir('calendrier')";><br /><br />
    		Fin :	 <INPUT type="text" name="date_selected_end" value=""size=9em style="margin-left:1.3em;">
    			<input type="button" name="voir_cal" value="cal" class='boutonCal' onclick="afficher_cal(),voir('calendrier')";>
    	</p>
    	<!---mois en cours--->		<INPUT type="hidden" name="mois_encours" value= "<?php echo $mois; ?>">
    	<!---année en cours --->	<INPUT type="hidden" name="annee" value="<?php echo $anne;?>">
    	<!---nb jours dans le mois--->	<input type="hidden" name ="nbjjs" value="<?php echo $nbjour;?>">
    	<!---date pour bdd --->		 <INPUT type="hidden" name="date_selected_en" value=""><br />
    	<!---premier jour du mois --->	 <INPUT type="hidden" name="premierjourmois" value="<?php echo $jourweek;?>">
     
    <!--- en tête du tableau contenant "1 bouton < cliquable", le mois et l'année, "1 bouton > cliquable" --->
    <div id="calendrier" >
    	<input type='button' name='bouton' value='<' onclick='previous(gen),Njours(gen)'; class='boutonCal'>
    	<input type='text' name='an'  class='inputladate' size=16em value='<?php echo $mois_fr[$mois]; echo " $anne";?>'>
    	<input type='button' name='bouton' value='>' onclick='javascript:next(gen),Njours(gen)'; class='boutonCal'>
    </div>
    </FORM>
    </body>
    </html>
    le fichier css
    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
     
    table { 
    	border-width: 1px;
                   border-style: outset;
    	width:15.2em;
    	border-collapse:collapse;
    	font-family:verdana;
    	font-size:0.83em;
    	text-align : center;
    }
    .inputladate { text-align:center;font-weight:bold;}
    .ladatedujour { font-weight : bold;}
    .boutonCal { cursor : pointer;}
    .couleurvide { background-color : cyan;}
    .curseur { cursor:pointer;}
     
    #calendrier {width:12.57em;display :none;}
     
     
    th,  td { border-width: 1px; border-style: inset;}
     
    td {
    	text-align:center;
    	border:1px solid grey;
    	background-color:white;
    	border-collapse:collapse;;
     
    }
    le fichier script
    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
     
    function afficher_cal(){
     
    	var ladate = new Date();	
    	var ladatedujour = ladate.getDate();// la date du jour
    	var lemois = ladate.getMonth() + 1;
    	var i, c;
    	var row, td, abbr; cell; 
    	var thead, tbody;
     
    	if (!calendrier) {
    		calendrier = document.createElement('table');
    		document.body.appendChild(calendrier);
     
    		var thead = table.createTHead();
    		row = thead.insertRow();
    		var nomsJours = [
          		{ nomCourt: 'Lun', nomLong: 'Lundi'    },
          		{ nomCourt: 'Mar', nomLong: 'Mardi'    },
          		{ nomCourt: 'Mer', nomLong: 'Mercredi' },
          		{ nomCourt: 'Jeu', nomLong: 'Jeudi'    },
          		{ nomCourt: 'Ven', nomLong: 'Vendredi' },
         		{ nomCourt: 'Sam', nomLong: 'Samedi'   },
         		{ nomCourt: 'Dim', nomLong: 'Dimanche' }
        		]; // https://youtu.be/QF9lUh5XPxo
     
     		for (i = 0; i < 7; i++) {
          		// j’ai repris les th, c’est quand même plus approprié pour des entêtes
          			th = document.createElement('th');
    			th.scope = 'col';
          			abbr = document.createElement('abbr');
         			abbr.textContent = nomsJours[i].nomCourt;
          			abbr.title       = nomsJours[i].nomLong;
          			th.appendChild(abbr);
          			row.appendChild(th);
        		}
    	}
     
    	// ici, thead existe forcément, mais tbody pas nécessairement
    	tbody = calendrier.querySelector('tbody');
    	if (!tbody) {
    		// s’il n’existe pas, on le crée…
    		tbody = calendrier.createTBody();
        		// … et on lui ajoute le gestionnaire d’évènement des <td>
    		tbody.addEventListener('click', function (event) {
    			if ('TD' === event.target.tagName) {
    				console.log(event.target.textContent);
          			}
        		});
      	}
    	else {
        		// s’il existe, on le vide
        		tbody.innerHTML = '';
      	}
     
    //
    // création du contenu
    //
    	var firstD = parseInt(document.gen.premierjourmois.value); //le jour de la semaine lundi=1, mardi=2,... dimanche=0
    	var lastD = parseInt(document.gen.nbjjs.value); // donne le nombre de jours (et le dernier) jour du mois
    	lastD = lastD + 1;
    	var actualMonth = parseInt(document.gen.mois_encours.value); // 
     
    	c = 1; 
    	var tbody = table.createTBody();
    	row = tbody.insertRow();
    // la première ligne du tableau
    	if (firstD === 0){	// premier jour du mois un dimanche
    		for (i = 1; i < 7; i++) {
    			cell = row.insertCell();
    			cell.textContent = '';
    			cell.classList.add('couleurvide');
    		}
    		cell = row.insertCell();
    		cell.textContent = c;
    		cell.classList.add('curseur');
    		if ((c === ladatedujour) && (actualMonth === lemois)){
    			cell.classList.add('ladatedujour');
    		}
    		c += 1;		
    	}
    	else if (firstD === 1){	// premier jour du mois un lundi
    		for (i = firstD; i < 8; i++) {
    			cell = row.insertCell();
    			cell.textContent = c;
    			cell.classList.add('curseur');
    			if ((c === ladatedujour) && (actualMonth === lemois)){
    				cell.classList.add('ladatedujour');
    			}
    			c += 1;
    		}			
    	}
    	else {	// les autres jours de la semaine
    		for (i = 1; i < firstD; i++) {
    			cell = row.insertCell();
    			cell.textContent = '';
    			cell.classList.add('couleurvide');
    		}
    		for (i = firstD; i < 8; i++) {
    			cell = row.insertCell();
    			cell.textContent = c;
    			cell.classList.add('curseur');
    			if ((c === ladatedujour) && (actualMonth === lemois)){
    				cell.classList.add('ladatedujour');
    			}
    			c += 1;
     
    		}			
    	}
    // les autres lignes du tableau
    	for (c = c; c < lastD; c){
    		row = tbody.insertRow();
    		for (i = 1; i < 8; i++){
    			if ( c < lastD){
    				cell = row.insertCell();
    				cell.textContent = c;
    				cell.classList.add('curseur');
    				if ((c === ladatedujour) && (actualMonth === lemois)){
    					cell.classList.add('ladatedujour');
    				}
    				c += 1;
    			}
    		}
    	}		
    }
    document.addEventListener('DOMContentLoaded', function () {
      madiv = document.getElementById('madiv');
     
      document.querySelector('input[name="voir_cal"]')
        .addEventListener('click', afficher_cal);
     
    });

  19. #19
    Expert confirm�
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par d�faut
    Si rien ne s�affiche c�est probablement � cause du display: none dans ton CSS.

    Attention � la d�claration des variables, ici tu as oubli� de remettre th :
    En mode 'use strict', les variables non d�clar�es, �a ne passe pas et �a fait un message dans ta console F12. C�est un des avantages du mode strict.

    Pour que les styles ne s�appliquent qu�� ton calendrier, je te sugg�re de lui donner un id (ou une classe), et d�appliquer les styles � cet id (ou cette classe).
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    if (!calendrier) {
        calendrier = document.createElement('table');
        calendrier.id = 'calendrier';
        document.body.appendChild(calendrier);
        …
    Code CSS : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #calendrier {
      border-width: 1px;
      border-style: outset;
      width: 15.2em;
      border-collapse: collapse;
      font-family: Verdana, sans-serif;
      font-size: 0.83em;
      text-align: center;
    }
    Remarque que le border-style: outset je l�ai mis juste pour que �a ressemble au style par d�faut quand tu utilises l�attribut d�pr�ci� border="1".
    La FAQ JavaScript � Les cours JavaScript
    Touche F12 = la console → l�outil indispensable pour d�velopper en JavaScript !

  20. #20
    Mod�rateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    Bonjour,

    Attention � la confusion des genres
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    if (!calendrier) {
        calendrier = document.createElement('table');
        document.body.appendChild(calendrier);
     
        var thead = table.createTHead();
    la variable table n'est pas d�finie � ce niveau il s'agit de calendrier.

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 2 12 Derni�reDerni�re

Discussions similaires

  1. G�n�rer un calendrier automatique
    Par philippesorin dans le forum 1&1
    R�ponses: 3
    Dernier message: 18/12/2007, 12h31
  2. R�ponses: 4
    Dernier message: 20/09/2007, 16h38
  3. G�n�rer un calendrier dans une table
    Par freud dans le forum Bases de donn�es
    R�ponses: 9
    Dernier message: 06/04/2007, 14h26
  4. G�n�rer un calendrier de Matches
    Par Gwenn dans le forum Algorithmes et structures de donn�es
    R�ponses: 10
    Dernier message: 18/08/2006, 16h23
  5. [Dates] G�n�rer un calendrier
    Par EvilAngel dans le forum Langage
    R�ponses: 1
    Dernier message: 10/08/2006, 00h25

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