Bonjour.
J'ai créé pour un forum un calendrier dynamique en javascript qui se met automatiquement sur le mois en cours et permet d'afficher le suivant.
Il permet d'afficher des messages issus d'une base de données en appelant un fichier PHP via la balise script.
Pour l'illustration, il se trouve ici.
Le problème, c'est le mois de juin... Qui a eu la bonne idée de commencer par un dimanche. Du coup il me faut une sixième ligne rien que pour le 30 juin.
Je souhaiterais n'afficher cette ligne qu'en cas de besoin. Donc pour un mois plus gentil envers moi que juin, comme le mois de mai, il n'y aurait que 5 lignes pour afficher les jours.
Pour compliquer le tout il est possible d'accéder au mois suivant par un lien... Donc il faut si besoin ajouter/retirer une ligne au clic sur ce lien en fonction du mois.
J'ai déjà fait le système grâce à des insertRow, insertCell et deleteRow. Tout fonctionne sous IE... Mais ça plante sous Firefox. Aurais-je utilisé des fonctions non conformes ?
Voici le code qui s'exécute à l'affichage de la page :
Et voici le code de changement de mois :
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 rowChang = 7; var jourdhui = new Date(); var MOIS = new Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre","Janvier"); var prefixe; if((MOIS[jourdhui.getMonth()].substring(0,1) == "A")||(MOIS[jourdhui.getMonth()].substring(0,1) == "O")) prefixe = "d'"; else prefixe = "de "; document.getElementById('calendrier').rows[0].cells[0].innerHTML = 'Calendrier du mois '+prefixe+MOIS[jourdhui.getMonth()]; var ecart = jourdhui.getDate() -1; var jour = jourdhui; jour.setDate(jour.getDate()-ecart); Tcase = jour.getDay() -1; if(Tcase == -1) Tcase = 6; var ligne = 2; var moisActu = jourdhui.getMonth(); while(jour.getMonth() == moisActu) { //6e ligne de jours if((ligne==7)&&(Tcase==0)) { rowChang = 8; document.getElementById('calendrier').insertRow(7); document.getElementById('calendrier').rows[7].align = "center"; for(a=0; a <= 6; a++) { document.getElementById('calendrier').rows[7].insertCell(); document.getElementById('calendrier').rows[7].cells[a].innerHTML = '*'; } document.getElementById('calendrier').rows[1].cells[7].rowSpan++; } //Affectation document.getElementById('calendrier').rows[ligne].cells[Tcase].innerHTML = '<a href="javascript:aff('+(jour.getDate()-1)+')">'+jour.getDate()+'</a>'; //Incrémentation jour.setDate(jour.getDate() + 1); //Changement de case if(Tcase < 6) Tcase++; else {Tcase=0; ligne++;} } //Changement de mois jourdhui = new Date(); document.getElementById('calendrier').rows[rowChang].cells[0].innerHTML = '<a href="javascript:changMois(1)">==> '+MOIS[jourdhui.getMonth()+1]+'</a>' //Récupération du pseudo du joueur var REGpseudo = new RegExp("^<span [^>]*>(.*)</span>$",'gi'); var pseudoCo = REGpseudo.exec(document.getElementById('pseudoCo').innerHTML)[1].toLowerCase(); //-------------------MESSAGES------------------- var message = new Array(); for(a=0 ; a <= 30 ; a++) for(b=0 ; b < 12 ; b++){message[a+MOIS[b]] = new Array();} //Appel du code du fichier PHP jourdhui = new Date(); data = "?mois1="+MOIS[jourdhui.getMonth()]+"&mois2="+MOIS[jourdhui.getMonth()+1]; document.write('<SCR'+'IPT type="text/javascript" src="http://max54.servehttp.com/Pikrass/recup.php'+data+'"></SCR'+'IPT>'); //-----------------FIN MESSAGES----------------- //Mois courant ou suivant ? var moisAff = 0;
J'ai à chaque fois mis en gras le bout du code qui s'occupe d'ajouter la ligne manquante, et qui ferait planter l'exécution sous Firefox.
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 function changMois(aj) { jourdhui = new Date(); jourdhui.setMonth(jourdhui.getMonth() + aj); var prefixe; if((MOIS[jourdhui.getMonth()].substring(0,1) == "A")||(MOIS[jourdhui.getMonth()].substring(0,1) == "O")) prefixe = "d'"; else prefixe = "de "; document.getElementById('calendrier').rows[0].cells[0].innerHTML = 'Calendrier du mois '+prefixe+MOIS[jourdhui.getMonth()]; var ecart = jourdhui.getDate() -1; var jour = jourdhui; jour.setDate(jour.getDate()-ecart); Tcase = jour.getDay() -1; if(Tcase == -1) Tcase = 6; var ligne = 2; var moisActu = jourdhui.getMonth(); //A bas la 6e ligne de jours ! if(document.getElementById('calendrier').rows.length == 9) {document.getElementById('calendrier').deleteRow(7); rowChang = 7;} for(Rligne in document.getElementById('calendrier').rows) { for(Rcol in document.getElementById('calendrier').rows[Rligne].cells) if((Rligne>=2)&&(Rligne<=6)&&(Rcol<7)) document.getElementById('calendrier').rows[Rligne].cells[Rcol].innerHTML = " "; } while(jour.getMonth() == moisActu) { //6e ligne de jours if((ligne==7)&&(Tcase==0)) { rowChang = 8; document.getElementById('calendrier').insertRow(7); document.getElementById('calendrier').rows[7].align = "center"; for(a=0; a <= 6; a++) { document.getElementById('calendrier').rows[7].insertCell(); document.getElementById('calendrier').rows[7].cells[a].innerHTML = ' '; } document.getElementById('calendrier').rows[1].cells[7].rowSpan++; } //Affectation document.getElementById('calendrier').rows[ligne].cells[Tcase].innerHTML = '<a href="javascript:aff('+(jour.getDate()-1)+')">'+jour.getDate()+'</a>'; //Incrémentation jour.setDate(jour.getDate() + 1); //Changement de case if(Tcase < 6) Tcase++; else {Tcase=0; ligne++;} } moisAff = aj; var deb=""; var fin=""; if(aj==0) {contrAj = 1;deb="==> ";} else {contrAj = 0;fin=" <==";} jourdhui = new Date(); jourdhui.setMonth(jourdhui.getMonth() + contrAj); document.getElementById('calendrier').rows[rowChang].cells[0].innerHTML = '<a href="javascript:changMois('+contrAj+')">'+deb+MOIS[jourdhui.getMonth()]+fin+'</a>'; } //Fin changMois
Merci d'avance !
Partager