Probleme avec AppendChild

Eléphant du PHP | 360 Messages

18 avr. 2007, 14:29

Bonjour,

Je dit tout de suite que je ne maitrise pas du tout le code qui suit (c'est pour cela que je demande votre aide), je l'ai réexploité, je le comprend, mais je ne suis pas du tout a l'aise je ne connais pas le détail de toutes ces fonctions (en commentaire les lignes de codes qui ne m'étaient pas utililes mais que je souhaites apprendre par la suite dès que j'aurais un peu de temps...).

Le code :

Code : Tout sélectionner

function horloge(id_cadran, time, appel) { // conversion en entier des variables time et appel; au premier appel ce sont des chaînes time = parseInt(time); appel = parseInt(appel); // on en fait une date var d = new Date(time * 1000); // on récupère les différentes composantes var heure = d.getHours(); var min = d.getMinutes(); var sec = d.getSeconds(); // gestion des 0 pour qu'il y ait toujours un chiffre de la forme xx if (heure < 10) { heure = "0" + heure; } if (min < 10) { min = "0" + min; } if (sec < 10) { sec="0"+sec; } // le jour (libellé) var day; switch (d.getDay()) { case 1: day = "Lundi"; break; case 2: day = "Mardi"; break; case 3: day = "Mercredi"; break; case 4: day = "Jeudi"; break; case 5: day = "Vendredi"; break; case 6: day = "Samedi"; break; case 0: day = "Dimanche"; break; default: day = "erreur : " + d.getDay(); } // le mois var mois; switch (d.getMonth()) { case 0: mois = "Janvier"; break; case 1: mois = "Février"; break; case 2: mois = "Mars"; break; case 3: mois = "Avril"; break; case 4: mois = "Mai"; break; case 5: mois = "Juin"; break; case 6: mois = "Juillet"; break; case 7: mois = "Août"; break; case 8: mois = "Septembre"; break; case 9: mois = "Octobre"; break; case 10: mois = "Novembre"; break; case 11: mois = "Décembre"; break; default: mois = "erreur : " + d.getMonth(); } var annee = d.getFullYear(); // l'année xxxx var jour = d.getDate(); // le jour (chiffre) // si elle n'existe pas on la crée if (appel == 1) { //fieldset = document.createElement("fieldset"); //legend = document.createElement("legend"); //hr = document.createElement("hr"); br = document.createElement("br"); divCadran = document.createElement("div"); //texteLegend = document.createTextNode("Horloge"); texteDate = document.createTextNode(day + " " + jour + " " + mois + " " + annee); texteHeure = document.createTextNode(heure + " h " + min + " min " + sec + " sec"); divCadran.id = "time"; divCadran.style.fontWeight = "bold"; // mise en forme du DOM divCadran.appendChild(texteDate); divCadran.appendChild(br); divCadran.appendChild(texteHeure); /*legend.appendChild(texteLegend); fieldset.appendChild(legend); fieldset.appendChild(hr);*/ //fieldset.appendChild(divCadran); document.getElementById("time").appendChild(divCadran); } else // sinon on met à jour la date et l'heure { [color=red]// TOUT SE PASSE ICI !!![/color] alert (document.getElementById("time").childNodes.item(0).nodeValue + " |-| "); /*alert (document.getElementById("time").childNodes.item(0).nodeValue + " |-| " + document.getElementById("time").childNodes.item(2).nodeValue);*/ document.getElementById("time").childNodes.item(0).nodeValue = day + " " + jour + " " + mois + " " + annee; document.getElementById("time").childNodes.item(2).nodeValue = heure + " h " + min + " min " + sec + " sec"; [color=red]// JUSQUE LA !!![/color] } // temps unix + 1 time = time + 1; // incrémentation de appel appel = appel + 1; // on rappelle la fonction aprés une seconde setTimeout("horloge('" + id_cadran + "', '" + time + "', '" + appel + "')",1000); }
Ce code fonctionne parfaitement sous Firefox, mais sous IE ... une erreur apparait (est-ce vraiment bizzare ???).
J'ai rajouté le alert pour comprendre où était mon erreur. Celui en commentaire ne fonctionne pas tout comme la 2e affectation du else ...
il n'aime pas mon "...item(2)...". Lorsque j'affiche le item(0), sa valeur est tout le temps à NULL (ne devrait elle pas etre la date ???), et item(2) n'est pas reconnu. Du coup le script ne s'execute pas.
Connaissez vous la solution a ce probleme ?

Merci d'avance !

Eléphant du PHP | 360 Messages

18 avr. 2007, 16:20

J'ai testé le code suivant :

Code : Tout sélectionner

else // sinon on met à jour la date et l'heure { if (document.all && !document.getElementById) { alert ("all"); document.all["time"].childNodes.item(0).nodeValue = day + " " + jour + " " + mois + " " + annee; document.all["time"].childNodes.item(2).nodeValue = heure + " h " + min + " min " + sec + " sec"; } else if (document.getElementById) { alert ("get"); document.getElementById("time").childNodes.item(0).nodeValue = day + " " + jour + " " + mois + " " + annee; document.getElementById("time").childNodes.item(2).nodeValue = heure + " h " + min + " min " + sec + " sec"; } else if (document.layers) { alert ("layer"); document.layers["time"].childNodes.item(0).nodeValue = day + " " + jour + " " + mois + " " + annee; document.layers["time"].childNodes.item(2).nodeValue = heure + " h " + min + " min " + sec + " sec"; } //alert (document.getElementById("time").childNodes.item(0).nodeValue + " |-| "); //document.getElementById("time").childNodes.item(0).nodeValue = day + " " + jour + " " + mois + " " + annee; //document.getElementById("time").childNodes.item(2).nodeValue = heure + " h " + min + " min " + sec + " sec"; }
Mais il m'affiche "get" au lieu de "all" ... Normalement IE fonctionne par document.all ... NAN ?
Dites ce que je fais, ne faites pas ce que je dis ...

Eléphant du PHP | 360 Messages

23 avr. 2007, 14:30

toujours personne pour m'aider ???? :cry:
Dites ce que je fais, ne faites pas ce que je dis ...

Mammouth du PHP | 505 Messages

23 avr. 2007, 16:08

Ca fait un peu préhistoire comme facon de coder... :) tu es en train de te prendre la tête a faire manuellement la distinction inter browser alors qu'il y a des bibliotheques qui font ca très bien...
tu devrais essayer... Tu y gagnerais en possibilité et en vitesse de dev.

essai soit prototype, soit mootoolspar exemple


avec prototype, ca donnerai qq chose comme ca

$('time') au lieu de document.all['time'] ou docuement.getElementById('time').

Ensuite, tu peux dériver a souhaite, $('time').childNodes[2].nodeValue = 'toto'


Etc... jette un coup d'oeil, tu verras, tu y gagneras, ca sert a rien de réinventer la roue. Sauf si tu veux devenir fabricant de roue, évidemment :)

Eléphant du PHP | 360 Messages

23 avr. 2007, 16:20

lol
merci

Mais finalement je suis retourné au bon vieux innerHTML ...
Ca fonctionne très bien et c'est instanné.

Mais je vais quand même regardé ce que tu m'as donné, car j'apprend à développer tout seul depuis presque 3 ans (bien que je sois en alternance dans ce domaine depuis 3 ans ... je me retrouve toujours tout seul :cry:), je ne sais pas quelle est la meilleure facon de développer, donc j'apprend ici et là où les forums me projettent ... au départ je ne faisait que du HTML puis PHP (et SQL mais ce n'est pas vraiment un language...) puis Javascript, puis j'ai appris a me servir du CSS ... après j'ai appris la methode AJAX et donc c'est un peu beaucoup fouilli tout ca dans ma tete !
Donc sans professionnel a mes cotés pour me guider ... je réinvente la roue :wink:

Allez, après avoir raconté un peu ma vie, je vous souhaite une bonne fin d'apres midi a tous !
Dites ce que je fais, ne faites pas ce que je dis ...

Mammouth du PHP | 505 Messages

23 avr. 2007, 16:41

bah le principe, c'est de mettre un id sur les champs que tu veux pouvoir modifier.

Ensuite, tu peux accéder a ce champs via la fonction $()

genre, $('champ1').innerHTML = 'mis a jour';

etc...

Ajax, avec ce truc, c'es de la rigolade :) ca se fait en 2 coups de cuillère a pot...

Regarde, google un peu, tu trouvera plusieurs tuto la dessus. La syntaxe peu surprendre un peu au dépard, mais rapidement, tu t'éclates.