Merci pour ce code c'est exactement ce que je cherchais.
Il y a juste un petit bug qui apparaissait lors de la sélection d'une année "px" est rajoutée derrière celle-ci.
Pour le corriger il suffit de l'enlever dans la fonction "selectYear" sur la ligne :
"calendar.cyear = parseInt(s[s.length - 1]) + calendar.cyear2 - 11+"px";"
Bonjour, d'abord merci pour ce code, je cherchais un calendrier et ça répond parfaitement à mon besoin.
Ensuite, je propose une petite amélioration:
- D'abord corriger les deux petites coquilles énoncées dans les commentaires plus haut (remplacer < par > dans la fonction getCellClassNameSuffix et remplacer var testDate new Date(y2, m2 - 1, 1); par var testDate new Date(y2, m2 - 1, 29); dans la fonction displayCalendar)
- Ensuite, pour ce qui consiste à afficher la date du jour avec une couleur différente, c'était, vu l'utilisation que je fait du calendrier, inutile pour moi. Déjà parce que j'avais pas besoin de mettre en évidence la date du jour, et surtout parce que la date du jour, c'est la première date non grisée suivant les dates passées. Elle est donc naturellement mise en évidence.
Par contre, pour une question de lisibilité, j'avais besoin de mettre en évidence la date choisie par l'utilisateur (en effet la textbox liée au calendrier peut être pré-rempli).
Du coup, j'ai apporte une petite modification pour qu'au lieu de colorier la date du jour, je colorie la date que contient ma textbox. Pour cela c'est pas difficile, il suffit de rajouter ceci dans la fonction getCellClassNameSuffix :
function getCellClassNameSuffix(day) {
var selectedDate = new Date(calendar.cyear, calendar.cmonth - 1, day);
var chosenDate = new Date(calendar.year, calendar.month - 1, calendar.day);
if (selectedDate.getYear() chosenDate.getYear() && selectedDate.getMonth() chosenDate.getMonth() && selectedDate.getDate() == chosenDate.getDate()) {
return "tod";
}
if (PAST_ENABLED || TODAY_ENABLED) {
// ... le reste du code ne change pas
Ainsi, j'utilise la couleur, qui à la base est celle de la date du jour, pour indiquer la date choisie.
Si quelqu'un veut mettre en avant la date du jour ET la date pré-choisie, il lui faudra définir un autre suffixe (mais comme moi je n'utilise pas la date du jour, ça me suffisait :D)
Merci pour ce code qui fonctionne très bien.
Le seul truc que je n'arrive pas à faire, c'est modifier la couleur des caractères des noms de mois et des chiffres des jours.
Je ne comprends pas trop pourquoi, mais je ne pense pas que cela vienne du code.
Quand je change la couleur dans le fichier css pour ces deux éléments (j'imagine la propriété color de .cal), rien ne se passe.
Une page d'exemple est fournie avec le code. Il intègre le minimum pour bien comprendre comment ça fonctionne :
- référence au fichier calendar.js
- un input pour saisir une date
- un bouton d'affichage du calendrier où la fonction d'appel prend le nom du champ date en paramètre.
Petit rappel pour les débutants :
- préférer l'utilisation de FF à IE : le plugin Firebug est des plus utiles pour analyser le code html généré dynamiquement, les différents styles css appliqués et passer en debug dans le code js
- ne pas hésiter à truffer le code js de alert() temporaires pour tester les différents paramètres pour ceux qui ne sont pas adeptes du debug js classique
@ Tous
Le temps me manque cruellement ces derniers temps (depuis 2 ans :) ) mais j'ai bien pris en compte vos différents retours. Je vous en remercie encore et tâcherai de parfaire le calendrier dès que possible.
super bolo mereci bien :)
je suis débutant en javascript
c gentil si tu m explique comment intégrer cette calendrier dans mon page sans faire une grande modification merci :)
chez moi il fonctionne parfait sur tout les navigateurs ie5.5, ie6, ie7, FF, chrome et safari
pour contrer la remonté en haut de page et optimiser le fonctionnement voici ma solution : remplacer le # qui est une ancre [# par ] dans le lien qui encadre l'image du calendrier
Génial et bravo, c'est ce que je cherchais!
Mais lorsque je lance le pg avec easyphp il ne fonctionne pas!!!
svp qui peut me donné une explication
merci d'avance :-)
ça marche impec sur FireFox et Chrome ,mais ça foire sur IE il m'affiche le calendrier en haut de page ignorant totalement la div où il est sensé s'insérer :( ,si quelqu'un pourra me montrer comment y remédier, je le remercie d'avance !!
Merci!
Cela fait un moment que je cherchais ce script!
il est parfait, et facile à integrer. Sur tout ceux que j'ai vu c'est le "best of the best"!
J'ai rencontré aucun bug jusqu'a présent.
Tu me facilites grave la vie!
Encore merci.
Joli boulot à première vue. Je met "à première vue" simplement parce que je n'ai pas encore regarder la source et que je ne suis peut-être un peu juste pour une critique sérieuse.
1/ l'intégration est rapide, en 5 minutes, ton calendrier était sur une de mes pages.
2/ avec cette page faite en 5 minutes mes stests ont donnés ceci :
- sous FF 3.5 : OK, mais sans rien modifier le placement du calendrier est assez éloigné du bouton (je suppose que cela se configure dans le code JS)
- sous Chrome 3 : OK, mais le look du calendrier est assez différent, plus étalé horizontalement. Même remarque que sous FF par rapport au placement du calendrier. Le calendrier réagit plus vite, mais ça c'est sans doute à Chrome et ses performances en JS.
- sous IE 6 : ne fonctionne pas (rien n'apparait, et le navigateur m'indique "Objet attendu" à la ligne 247
3/1ère critique : effectivement, comme l'a dit quelqu'un plus haut, la page semble se recharcher ou en tout cas se recaler sur le haut de la page quand on choisit une date, ce qui est très énervant. Je vais essayer de comprendre pourquoi, parce que dans mon cas, cela le rend quasi-inutilisable, trop inconfortable pour l'utilisateur.
Je met 9/10 en raison des petites remarques ci-dessus.
Merci beaucoup en tout cas !
Excellent programme ... le meilleur parmi ceux que j'ai testés (et pourtant régulièrement je le confronte à d'autres solutions ;-) ).
C'est pourquoi, encore aujourd'hui, je l'intègre régulièrement dans mes solutions informatiques.
très bon script. Merci Anthed.
Juste une petite critique : sur un champ date en bas d'un formulaire qui nécessite de faire défiler la page, le fait de cliquer sur le bouton et d'ouvrir le calendrier replace l'utilisateur en début de page. C'est un peu gênant parfois, mais sinon beau boulot !!
super ce calendrier
quelques correctifs a integrer dans le code mais c'est vraiment tres bon.
un point de detail peut etre mais la fonction displayCalendar(id, ev) ne semble pas fonctionne avec un nom indicé de type nominput(ligne) dans la variable id ou alors j'ai merdu ailleur ?
Ca serait cool si tu integrais les modifs dans le script!
et pour le reste un grand merci ca marche du tonnerre
Tout d'abord merci pour vos différents commentaires bien sympas. Je manque un peu de temps en ce moment mais je n'oublie pas vos différentes remarques d'améliorations. Je les apporterai dès que possible.
A l'attention de LENAIC89 :
Je te conseille de garder le fonctionnement du calendrier plus ou moins tel qu'il est. Ensuite, pour colorer certaines dates en fonction d'événements qui pourraient se trouver dans une base (mieux qu'un fichier), rien de tel qu'un petit appel ajax à chaque changement d'année ou de mois pour récupérer tes infos et surcharger dynamiquement l'affichage de base du calendrier (changement de couleur, affichage du détail de l'événement au survol par la souris du jour concerné, ...).
Bonjour,
un autre bravo de ma part est du mise !!!
mais plus sérieusement je cherche à modifier ton code (ajout d'une fonction ou d'une partie du code)
de manière à pouvoir changer la couleur de certaines dates.
plus précisément j'aimerais pouvoir stocker dans un fichier, une base ou autre une liste de dates (des formations réparties sur l'année) et ensuite que ces dates soient utilisées pour colorer les cases correspondante dans le calendrier.
le système de stockage devra pouvoir être mise a jour sans modifier le code de préférence.
j'ai bien essayé de modifier ton code mais n'étant pas un petit génie du java script je me retrouve un peu bloqué.
merci de ton aide (si tu y pense car ce sujet commence a avoir de l'age !!!)
Bonjour,
Bravo pour ce script, il correspond exactement à ce que je cherchais.
Je rencontre le même problème que décrit par pierrealain6913 concernant les selects. J'ai vu la solution proposée par Anthed mais je ne comprends pas comment l'utiliser.
Je suis vraiment peu expérimenté en javascript, si quelqu'un peu me décrire plus précisement la méthode à suivre, merci d'avance.
deux variables non déclarées, ajoutez var i; var j; dans function addMonthDiv(calendarDiv)
et de manière generale pour supprimer les warnings css :
les tailles de polices en dessous de 9pt/px ne fonctionne pas sous mac, içi elle sont à 8, quand on bosse, comme moi, en mode strict pour tout on le prend dans les dents.
font-family: Arial; c'est léger comme passe-partout, pour celles et ceux que çà intéressent, un vrai passe-partout, windows, linux, mac etc.
font-family: verdana,arial,helvetica,geneva,"DejaVu Sans Mono","Bitstream Vera Sans Mono",sans-serif;
img.but {width:16; height:16; cursor:pointer}
width et height sans valeurs de pixels!
img.but {width:16px; height:16px; cursor:pointer}
c'est mieux ;) et pour pinailler ;(
.calh td {color:#ffffff}
toute valeur color déclarées doit être suivi d'une valeur de background, dixit w3c.comme içi :
Bonjour a tous , et bonne année. Tout d'abord merci à tous ceux qui nous aident, j'ai souvent utilisé des codes trouvés ici, mais là j'avoue (trés humblement) que je suis perdu . Ma question est la même que celle de ALAIN18, a savoir comment faire pour que ce le calendrier soit affiché en permance sans passer par le OnClick ?
Au fait chez moi ça fonctionne sous IE Firefox et googlechrome
D'avance merci
Bien-sur je suis super satisfait de ce calendrier, je souhaiterais qu'il s'affiche automatiquement sans a avoir a cliquer sur l'icone. Si qq a une idee je suis preneur, le probleme a ressoudre concerne le event qui est envoye au JS et la je patauge. Il faudrait que cela marche aussi bien sous IE que FF et autres.
Merci d'avance
J'ai pas assez approfondi le code pour te répondre, cependant tu peu utiliser en SQL lors de ton insertion les fonction Year(tadate) Month(tadate) Day(tadate) et concaténer ça dans une nouveau champ.
Chapeau pour ce script, je l'utilise actuellement pour enregistrer des dates dans une base access mais je souhaite migrer le système sur mysql et alors là grosse galère. Le format de la date ne correspond pas à la norme us.
Du coup la date est à 0 dans la base.
Je voudrais juste savoir si c'est simple de remplir 2 champs dans le formulaire lorsqu'on clique sur une date. ex:
Champ1fr (avec la date au format français dd/mm/yyyy comme actuellement)
Champ1us (avec la date au format US yyyy/mm/dd) qui sera en hidden dans le form
Ce qui est écrit plus haut, c'est à dire dans ta page :
<link href="../ressources/stylesheets/calendar.css" type="text/css" rel="stylesheet" />
<script src="../ressources/script/Calendar.js"></script>
Appeler le calendrier avec
et appeler avec
j'ai mis mes scripts/img/css dans un dossier /ressources/
Bonjour, cette source est vraiment très chouette, j'ai passé pas mal de temps a chercher un calendrier simple-clair-customizable et compatible mozilla-ie
tout content de cette trouvaille, je teste le script avec la page calendar.html sur mon serveur, et l) ca fonctionne sur ie (et plus sur Firefox !!
apres avoir relu tout les coms de cette pages. je trouve la solution :
ca viens juste du \ qu'il faut remplacer par / au debut du fichier
<script src="scripts\calendar.js"></script> deviens <script src="scripts/calendar.js"></script>
mais voila.. vous allez rire.. une fois intégrer a mon formulaire php.. ça fonctionne sur firefox mais plus sur ie 6
qui me dis dans la barre d'état qu'il y a des erreur sur la page
je ne comprend vraiment pas d'où ça viens.. il n'aime pas les div dans les div peut-être ?
si quelqu'un a eu le même pbm .. ou a une idée je le remercie de me donner un coup de main
J'oubliai, pour le scroll il faut remplacer
document.body.scrollLeft
document.body.scrollTop
par
document.documentElement.scrollLeft
document.documentElement.scrollTop
Dans initElement, toujours pour le même problème de placement.
Bonjour, Ce script est pas mal, mais je me permets d'apporter une petite soluce a un bog avec certain Doctype.
En effet lorsque l'on joue avec les dimensions/placements il faut dorénavant préciser "px" ou "%" sinon ce n'est pas pris en compte et le calendrier reste à l'emplacement initial de la div.
donc pour la fonction initElement rajouter +"px"; à la fin des lignes 279,281,284,286 et 289 à 292.
Ensuite pour éviter que le scroll ne remonte tout seul au click sur certain navigateur avec les liens, remplacer l'appel de la fonction:
javascript:displayCalendar('w0', event);
par
return displayCalendar('w0', event);
et rajouter return false; à la fin de la fonction displayCalendar ligne 353.
Hello,
Quand tu choisis un jour, c'est la fonction selectDay() qui est appelée. A l'intérieur de celle-ci l'appel à la fonction hideCalendar() permet de masquer le calendrier. Tu peux donc supprimer cet appel pour conserver le calendrier visible après avoir choisi ta date.
Tchô.
Bonjour Anthed,
Je voulais juste te signaler un petit bug pas bien grave qui crée le phénomène suivant :
aujourd'hui, nous sommes le 31 mai et tous les mois comportant 31 jours jusqu'à la fin de l'année ont leur jour 31 coloré comme un jour "today".
Ceci est créé à la ligne 701 du fichier "calendar.js" par un test "<" à la place de ">".
Le test "<" est déjà fait à la ligne 699. J'ai testé après la correction en ">" et je n'ai plu que le 31 mai qui soit "today".
Encore bravo et merci pour ton code.
Bonjour Anthed,
Merci pour cet excellent code qui cadre exactement avec ma recherche.
Ton code est très clair, très aéré, tes règles de codage sont excellentes, les noms des variables explicites... Bravo.
Avec très peu de connaissances en javascript, j'ai pu l'adapter exactement à mon besoin.
Pour un peu, on en redemanderais. Alors si tu en as d'autres comme celui là, n'hésite pas.
Encore bravo et merci.
bonjour
merci beaucoup pour sette calendrier.
mais ect ce que qh'ila y a une possibilite de changer la forme de date à YYYY-MM-DD pour l'enregister dans ma base mysql car les autres format n'enregistrent pas dans ma base
merci
Tu as peut-être un antivirus qui s'affolle dès qu'il rencontre un fichier javascript.
Obtiens-tu le même résultat si tu essaies de télécharger le fichier unitairement : calendar/scripts/calendar.js ?
Bonjour,
Lorsque je télécharge le fichier ZIP, mon antivirus me sort:
"Le fichier javascriptfr_CALENDRIER-JAVASCRIPT___Page.zip contient le virus Compressed_Huge_File"...
J'essaie de faire un truc avec mais je bloque un peu (je débute en Javascript). J'essaie d'intégrer un compteur qui compte le nombre de jours entre le clik sur la première date et le click de la 2ème date, tout en ignorant le samedi et dimanche, et plus tard les jours fériés qu'on définira.
Bref que le compteur ne compte que les jours "ouvrés" quand on selectionne les 2 dates.
Si vous avez une idée je suis preneur, merci d'avance :)
je l'ai intégré à ma classe autoformulaire en PHP !!! ça marche du tonnerre !!!...
merci beaucoup parceque le javascript c'est pas mon fort...
(ps : NE PAS OUBLIER D'AJOUTER
sinon ça marche pas !!! j'ai passé une demi/heure à me demander si savais encore programmer... :p oui je sais.. mais bon c'est dimanche soir alors faut pas trop en demander non plus...)
Nota : le format du champs retourné est : date française DD/MM/YYYY, est-ce qu'il y a la possibilité de retourner une date YYYY-MM-DD (un paramètre de plus qui permettrais de choisir du genre : displayCalendar('name', 'format', event); ).
à propos du multilangue, je me suis permis une petite modif : les deux premières lignes je les ai mises dans un autre fichier nommé : calendar.lang-fr.js (pour gérer le français)
var MONTH_LIST = new Array("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre");
var DAY_LIST = new Array("Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim");
ce qui me permet de créer un autre fichier nommé : calendar.lang-en.js (pour gérer l'anglais)
var MONTH_LIST = new Array("January", "Febrary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var DAY_LIST = new Array("Mon", "Tue", "Wen", "Thu", "Fri", "Sat", "Sun");
j'ai ensuite un script PHP qui me trouve la langue et la stocke dans une variable de session ("lang") ce qui me permet de faire cet insertion en début de page dans le head.
$output .= '<script src="scripts/calendar.lang-' . $_SESSION["lang"] . '.js"></script>';
et ça marche trés bien...
encore une fois bravo pour ce merveilleux code (trés propre, j'arriverais presque à comprendre le javascript avec ça :p) !!!....
Côté esthétique, ton idée est bonne mais je ne touche à rien : les goûts et les couleurs ...
Par contre, le fait que le contenu du calendrier soit à présent généré depuis le fichier js fait que chacun peut modifier l'ordre à sa guise.
A+.
Ah j'oubliais un autre argumetn en faveur de la generation dans les js
j'ai essayé les masterpages (asp.net) hier et tous les id sont prefixés,
donc ca fout en l'air le code js ... :/
Autre idée :
- Quand la souris est en dehors du calendrier trop longtemps :
simuler le clic sur la corix (ferme la fenêtre)
Oui j'imagine bien que niveau delai de livraison ... :)
J'ai pas mal lutté pour faire du DHTML (planning modifiable à la souris) debug etc ...
En revanche je suis stagiaire là, donc j'ai du temps à perdre :p,
d'où ma quête du parfait :)
Petite préférence perso sur l'esthétique :
Je trouve que le haut du calendrier est un peu encombré et on met quelque seconde avant de "voir" comment ça fonctionne (est ce moi qui ait du mal ? :p)
Solution proposée :
- Faire passer la flèche "suivante" pour le mois et l'année à droite de ces derniers.
- Supprimer les fleches "bas" (de toute façon, la fonctionalité reste si on clique sur les noms)
Concernant l'utilisation d'une classe, je n'ai pas grand chose à rajouter par rapport à ce que j'ai déjà dit. Si tu préfères du javascript version java, libre à toi (pourquoi pas).
Générer les composant html du calendrier depuis le fichier js plutôt que l'intégrer directement à la page concernée est en revanche une bonne idée (plus facile à intégrer et à mettre à jour en cas de présence sur plusieurs pages).
Pour info, je signale que j'avais réalisé la première version de ce calendrier dans le cadre professionnel et une des devises à méditer dans ces circonstances est : "Le mieux est l'ennemi du bien". Les impératifs de développement et les délais de livraison font qu'on n'a jamais assez de temps pour réaliser quelque chose de parfait. L'idéalisme poussé à l'extrême n'est pas rentable ...
Pour finir, je tâcherai de fournir une version prochainement avec une couleur différente et la possibilité de désactiver les liens associés aux jours passés.
Génial et bravo, c'est tip top ce que je cherchais! Mais j'ai voulu aussi installer l'extension de Yodev (pour mettre en couleur differemment les jours passés) mais ça ne change rien. :-(
Si qqun à la solution à ce bug
Ne prend absolument pas ma remarque comme une critique méchante.
C'était juste une opinion personnelle.
Le but de cette critique est avant tout d'avoir des explications sur le pourquoi de cette façon de faire (que quasiment tout le monde partage sur javascriptfr) ou alors de me remettre en question par rapport à ce que je croyais savoir.
(Je ne dis pas que tu l'a mal pris mais je préfère être absolument clair :)).
je ne cherche pas la performance (je suis d'accord que ça ne change rien).
La lisibilité, même si j'en suis sensible, n'est pas non plus en question.
Ce que je n'aime pas c'est aussi l'html directement dans la page ...
J'ai plein de code récupéré un peu partout et au final on sait plus quoi appartient à quel bout de js quand on a une page complexe.
J'aime le code très organisé, et j'ai rencontré un cas bizarre ou un argument n'était pas utilisé dans une fonction au profit d'une variable plus globale du même nom ! Bref une erreur vicieuse.. (je crois que j'ai même gardé un fichier pour illustrer la chose.)
Au final j'aime bien l'action unique quand j'ai envie de quelquechose.
Je veux un truc boum j'inclu un fichier (une seule action) et hop je peux l'utiliser.
Je n'ai pas à :
-- Inclure le js
-- Copier le code html (le retrouver déja, le mettre en commentaire dans le js ... c'est moyen :D)
-- Vérifier qu'il entre pas en collision avec d'autre variable ...
Alors qu'ajouter un fichier.js ( == une classe) je trouve ça plus simple et plus modulaire.
Et c'est pas la place que prend "function MaClass { }" :p qui grossit le code
(normalement si on fait cela très proprement on compresse aussi le js...)
Autre petite remarque : Générer le calendrier (l'html) dans le js permet également de le compresser (boucle js ...) et sans le js ça fait une page html plus propre (que le contenu et pas les outils et l'interface).
Encore un opinion perso qui ne prend appui que sur mes 2 seul mois de web dev :)
(ca vaut ce que ca vaut, dite moi si j'ai tort surtout) :
Je trouve ca crade d'avoir des choses cachés (visible) ou non affichés (display) dans une page si ce n'est pas pour utiliser avec du js...
Hors si js est désactivé ca évite de télécharger un truc qu'on utilise pas !
Les variables statiques sont déclarées au début du fichier : monthInYear et dayInWeek
L'instance unique de calendrier, puisque comme tu le dis, il ne peut y en avoir qu'un affiché à la fois, est déclarée juste après : var calendar = new Calendar();
Suivent les fonctions codées et écrites proprement : toutes les normes de codage sont respectées.
Tout ça pour dire que je ne vois pas trop où tu veux en venir. Le principe que tu énonçais précédemment (le 13/11/2007 17:06:09) de tout mettre dans une seule classe ne 'proprifiera' pas grand chose, ça te fournira simplement une mise en forme javaifiée (t'as vu, moi aussi, je suis super fort en néologismes ;) ) sans grand intérêt : pas plus performant, pas plus lisible.
Le nom du fichier suffit d'après moi à comprendre que son contenu gère le calendrier. A partir du moment où tu sépares tes traitements javascript dans différents fichiers en fonction de leur rôle, tout va bien je pense.
Il est possible de déclarer des variables statiques ...
Donc même si il y'a plein d'instances ... on peut se débrouiller pour que si une instance Popupe (du verbe Popuper si si ! :p), elle fasse disparaitre les autres.
Au final ça fournit aux instances un comportement qui ressemble aux menus contextuels : Deux instances ne peuvent être popupé et visible en même temps.
Je vrai "proprifier" le code quand j'aurai plus rien à faire...
Interessé ou pas par le code proprifié ?
1) il me semble que les variables globales et les variables internes sont à leur place ...
2) je n'ai pas eu recours à cette solution pour une question de performances. Dans le cas où plusieurs zones de saisie de date sont présentes dans une même page, cela permet de n'instancier qu'un objet commun.
de plus : 'code plus propre sous forme de classes' : ce n'est pas du java et c'est même fondamentalement différent. Pour la petite histoire, le terme javascript a été choisi à l'époque parce que le langage java avait un certain succès à ce moment, c'est tout.
3) les accolades, c'est comme chacun veut, du moment que l'accolade fermante est alignée avec le mot clé associé (if, for, while, ...) c'est propre.
Je souhaitais simplement qu'il y ait un seul commentaire avec la note.
Bref je reviens juste pour dire que dans le fichier calendar.html y'a une petite faute sur le dernier div, deux onclick se suivent :
onclick="increaseYear();" onclick="incrementMonth();"
J'en profite poser quelques questions :
1) Pourquoi à chaque fois que je trouve un script sympa les variable et les fonctions sont en vrac dans le fichier (pas a l'interieur d'une seul fonction en vue d'e nfaire une classe PROPRE et sans risque de collision) ?
2) Ne serait-il pas plus sympa / propre de generer également un div en position absolue, et d'y incoporporer le code HTML du calendrier dynamiquement ?
Bref c'est ce que je vais faire, au final j'aurai juste à taper :
Au vue de la quantité de source ou ce n'est pas "propre" à mon sens ( == sous forme de classe) je me demande si y'a encore des choses importantes que j'ignore à propos du javascript ... :S
3) N'y a-t-il personne qui deteste les accolades à la K&R à part moi (== cad en fin de ligne et non pas aligné avec les accolades fermantes) ?
Ou bien est ce que tous le monde le fait pour une raison que j'ignore.
(hypothese : certains navigateurs trouvent une erreur si les accolades ne sont pas en fin de ligne ?)
C'est toujours possible en le demandant. Mais comme tu as mis 10/10 (5 étoiles) et que dans le message précédent, tu disais vouloir lui mettre cette note ... on change ou pas ?
Oops pas fait gaffe que maintenant il fallait noter en même temps que l'on commente, d'où ce message ...
Pas de possibilité de changer sa note Messieurs les admins ?
Tu nous donnes ton num de carte bleu pour les royalties ? :p
Nan sérieusement ...
Pour mon premier site web (un intranet en fait) c'est exactement ce que je cherchais !
Intuitif et apparemment sans bug !
Merci beaucoup :)
En plus t'a fait une démo sympa et sans prise de tete, les gens le font pas souvent...
10/10
Bonjour,
Si je comprend bien YLEBAILLY = YODEV peu importe un grand merci en tout cas, mais je ne sais pas si c'est moi, car plus d'affichage spécial aujourd'hui dans le calendrier, malgré les modifs, je suis vraiment bon à rien... Pourtant pour être sure avant de poster, je suis repartie de l'original et j'ai refait les modifs et rien ???
Bon j'y retourne et si je trouve mon éventuelle erreur je reposte.
Merci beaucoup pour ton aide.
@+ JLN
Salut JNL, je t'avourai que c'est ce que je voulais faire à l'origine, mais il faudrait revoir la façon dont les classes CSS sont défini (je bosse sur plein de truc en même temps, pas trop le temps de regarder ...). Sinon, tu peux le faire direct dans le code javascript mais c'est moins propre ... par exemple pour la date du jour en rouge :
Petite précision au sujet de la modif proposée par YODEV c'est la fonction "fillCalendar" et non la fonction "Calendar" pour les néophite que nous sommes, c'est moins pénible à rechercher.
Sinon merci à ANTHED pour ce script génial et à toi YODEV pour ce petit plus et si j'osai... Ne sarai-t-il pas possible de colorer le jour de la date figurant dans le champ sur le calendrier tout comme on le fait pour la date courante ? Si oui comment s'y prendre, le javascript est pour moi (et bon nombre d'entre nous) trop inconnu pour prétendre une modif qui ne mette pas tout en l'air.
Bonjour
Merci tout d'abord pour ce script,j'essaie de l'utiliser dans une page JSP mais je ne sais pas les balises que je dois ajouter à mon fichier JSP pour que ça marche.
Super... juste petite bonus pour gérer affichage date passé / aujouird'hui :
dans le css, ajouter :
.today {background-color: #b68211; font-weight:bold;}
.beforeToday {background-color: #baac8f;}
Dans le js :
Encore bravo pour ce calendrier, je confirme encore que c'est une vraie merveille comme je l'ai dit l'année dernière, sauf qu'il y a un tout petit bug dans le fichier calendar.htm
Ok, merci JLN. Concernant la surbrillance, je vais voir ce que je peux faire pour que le jour précédemment sélectionné soit mis en valeur de façon différente de celui survolé par la souris.
Nerolph, je suis plutôt pro-open-source donc fais ce que tu veux. Si tu récupère des bouts de code à droite et à gauche et qu'à chaque fois, tu dois rajouter 'Un grand merci sincère et chaleureux à untel blablabla' dans le code, tu ne vas pas t'en sortir :) et je dis un grand 'ZUT' à ceux qui se prennent pour des grands maîtres du développement en exigeant que leur nom soit présent partout.
Je repost juste pour te demander s'il ne te serais pas possible de mettre en surbrillance le jour en plus d'être sur le bon mois ? Sinon pour le reste je viens de tester et c'est au poil ! Même en insistant sur l'année et autre je n'arrive jamais au 32/10...
Merci pour le correctif Anthed, pour le 32 je ne suis pas non plus arrivé à reproduire... Est-ce réellement fondé ?
Merci pour ton aide, car je maitrise pas mal le php mais encore assez le javascript pour me plonger réellement dans ta source... Pour ma part je l'utilise sur un site perso sur un serveur ou je n'ai pas ouvert l'accès, donc perso.
Bonne prog à tous,
@+ JLN
Quand je parlai de licence, c'était juste pour savoir si tu exigeais, ou pas, ton nom dans les sources, telle que le permettent (voire obligent) certaines licences libres (LGPL, par exemple).
Je viens d'apporter la correction sur le positionnement du calendrier. Par contre, je n'arrive pas à reproduire le bug du 32/10. Si quelqu'un est tombé dessus, merci de m'indiquer si cela concerne un browser particulier et quel est l'enchaînement d'actions conduisant à cette erreur. Merci d'avance.
Bonjour et bravo pour ce partage !
Hors le bug signalé pour le 32 octobre, il y en a un autre et de taille, si le champs contient déjà une date, on se retrouve avec le calendrier en décembre 2006, même sur la page donnée en exemple. Il serait sympa d'apporter les corrections afin que le jour par défaut dans le calendrier soit celui qui se trouve dans le champs ou s'il n'y a rien ou date non valide, la date du jour. Le net plus ultra serait de remettre ici à jour.
Merci pour tout tes efforts et je met 9 à cause des petits bugs mais quand même il très bien ce calendrier.
C'est un calendrier que j'ai fait de mon côté mais que j'ai déjà intégré dans différentes applications professionnelles (progiciel de prêts bancaires, application web de bourse en ligne). En le mettant à disposition ici, je suppose que quiconque peut le réutiliser. Si ce n'est pas le cas, je compte sur vous pour m'envoyer des oranges en prison ou pour me pistonner quand je pointerai à l'ANPE.
Hello, une version compatible Mozilla sera disponible très prochainement. Concernant la remarque de Nerolph, n'hésite pas à me faire signe dès que le but du W3C sera atteint (pas avant 2075 à mon avis). Enfin, pour PCPT, les 2 versions sont identiques, j'avais à l'époque rencontré un problème d'import de mes sources. Si un admin peut regrouper les commentaires des 2, il peut supprimer l'une des 2 versions.
A+.
ce script ne fonctionne que sur IE 6 et Opera (execution sur IE, opera, netscape, mozilla)
dommage, c'est une vraie merveille, SVP qu'un developpeur JS le fixe
merci les amis :)
Hello,
Concernant le problème évoqué ci-dessus sur les selects qui restent sur les div, je signale qu'afficher le div sur une iframe marche plutôt bien, pour ceux qui ne seraient pas emballés par l'idée de masquer leurs selects ...
A+.
Effectivement mais je crois que c'est le lot tout div. Pour palier à ce problème, il n'y a pas d'autre choix que de masquer les selects de la page pendant l'affichage d'un div. Pour ce faire, on peut affecter à tous les selects un style particulier. Il suffit alors, lors de la détection de l'affichage du div, de modifier la visibilité de la classe correspondante. On peut également affecter à chaque select un id spécifique (ex : select0, select1, ...) et boucler sur chacun :
function hideSelects()
{
var i = 0;
var element = document.getElementById("select" + i);
while (element != null)
{
element.style.visibility = "hidden";
i++;
element = document.getElementById("select" + i);
}
}
Lors du masquage du div, procéder de la même manière en réaffectant "visible" à chaque select.
A+.
Ce type d'application est exactement ce que je cherchais.
Cependant, j'ai testé ce script et j'ai un gros soucis qui le rend presque inutilisable :
Si le calendrier doit s'afficher dans une région où il y a une zone de liste (<select>...options...</select>), le contrôle zone de liste s'affiche toujours par dessus le calendrier et gêne le choix éventuel d'une date ou d'un jour particulièr.
Cordialement,
Salutations.
28 juin 2014 à 19:14
8 oct. 2012 à 13:04
20 avril 2012 à 14:13
10 nov. 2011 à 14:44
Sous IE6 :
- sur une page HTML, ça marche nickel ;
- mais sur une page aspx (sous IE6), toujours des erreurs JavaScript et ça marche pas.
Quelqu'un a déjà eu ça ?
Merci
7 juin 2011 à 10:34
Il y a juste un petit bug qui apparaissait lors de la sélection d'une année "px" est rajoutée derrière celle-ci.
Pour le corriger il suffit de l'enlever dans la fonction "selectYear" sur la ligne :
"calendar.cyear = parseInt(s[s.length - 1]) + calendar.cyear2 - 11+"px";"