Variable undefined (javascript) [Résolu]

Messages postés
4
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
2 mai 2009
- - Dernière réponse : cs_Narvarth
Messages postés
4
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
2 mai 2009
- 2 mai 2009 à 21:18
Bonjour,
j'ai créé un site et j'utilise javascript pour afficher la date et l'heure.
Le problème c'est qu'avec IE (8 en l'occurence) ça ne marche pas alors qu'avec Firefox tout se passe bien.

IE dit que les variables 'day' et 'month' sont 'undefined'.
Je sais que ça veut dire que la référence d'objet n'est pas définie à une instance d'un objet.
Mais je ne comprend pas pourquoi.
4 lignes qui posent problème à la fin:
var days = Translate("days_array", lang);

var months = Translate("months_array", lang);

var day = days[date.getDay()];

var month = months[date.getMonth()];


Voici l'extrait de code de ma page:
<script type="text/javascript" src="time.js" temp_src="time.js"></script>
...
...
<li id="lang">fr</li>

Voici le fichier time.js:

/*
//File : time.js
//Author : Narvarth
//For : SpaceWarchief™®

// May be incompatible with IE

// Please do not remove these lines
*/

function Translate(
item,
lang)
{
var result;

if (lang == "fr")
{
if (item == "days_array")
{
result = new Array(
"Dimanche",
"Lundi",
"Mardi",
"Mercredi",
"Jeudi",
"Vendredi",
"Samedi");
}
else if (item == "months_array")
{
result = new Array(
"Janvier",
"Février",
"Mars",
"Avril",
"Mai",
"Juin",
"Juillet",
"Août",
"Septembre",
"Octobre",
"Novembre",
"Décembre");
}
else if (item == "first_day")
{
result = "1er";
}
}
else if (lang == "en")
{
if (item == "days_array")
{
result = new Array(
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday");
}
else if (item == "months_array")
{
result = new Array(
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December");
}
else if (item == "first_day")
{
result = "1st";
}
}

return result;
}



function SetDateString(
lang,
sec,
min,
hour,
day,
day_number,
month,
year)
{
var result;
var add;

if (lang == "fr")
{
switch (day_number)
{
case 1:
{
add = "er";
break;
}
default:
{
add = "";
break;
}
}
result = day + " " + day_number + "" + add + " " + month + " " + year + " - " + hour + ":" + min + ":" + sec;
}
else if (lang == "en")
{
switch (day_number)
{
case 1:
{
add = "st";
break;
}
case 2:
{
add = "nd";
break;
}
case 3:
{
add = "rd";
break;
}
default:
{
add = "th";
break;
}
}
result = day + " " + month + " " + day_number + "" + add + " " + year + " - " + hour + ":" + min + ":" + sec;
}

return result;
}



function GetLang()
{
var lang;

if (document.getElementById("lang"))
{
lang = document.getElementById("lang").innerHTML;
document.getElementById("lang").style.visibility = "hidden";
}
else
{
lang = "en";
}

return lang;
}

var date = new Date;

function Timer()
{
var lang = GetLang();
var days = Translate("days_array", lang);

var months = Translate("months_array", lang);

date = new Date;

var hour = date.getHours();
var min = date.getMinutes();
var sec = date.getSeconds();
var day = days[date.getDay()];
var day_number = date.getDate();
var month = months[date.getMonth()];
var year = date.getYear();
if (year < 2000)
{
year += 1900;
}
if (sec < 10)
{
sec = "0" + sec;
}
if (min < 10)
{
min = "0" + min;
}
if (hour < 10)
{
hour = "0" + hour;
}


//Warning:
//The following lines change the integer value of day_number
//It can be a problem for the tests such as (x 1) because x is not an int but a string: x "01" instead

//if (day_number < 10
//&& day_number > 1) // to let 1st and not 01st
//{
//day_number = "0" + day_number;
//}

// treated in SetDateString(...) function
//if (day_number == 1)
//{
//day_number = "1er";
//}

var datetime = SetDateString(
lang,
sec,
min,
hour,
day,
day_number,
month,
year);

if (document.getElementById)
{
document.getElementById("dateTime").innerHTML = datetime;
}
}

function Biper()
{
Timer();
setTimeout("Biper()", 1000);
}

window.onload = function()
{
Biper();
}


Merci d'avance pour tout éclaircissement.
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
3
Merci
Bonjour,

free et/ou les autres hébergeurs, au niveau du javascript : c'est pareil !
     le javascript, c'est coté client ! pas serveur !
il existe des différences entres tous les navigateurs et surtout
   au niveau du design ( quoique en utilisant le bon doctype....
   ça s'arrange en général )
MAIS si ton machin fonctionne en local et pas sur ton site, à priori,
    ça n'a pas grand chose à voir avec les navigateurs
    tes soucis doivent être les mêms avec tous les navigateurs,
    sauf IE et Opera qui arrêtent les script et les autres qui continuent
    tu dois aussi avoir des erreurs dans les console d'erreurs !
avec ce que tu nous fournis, tout ce que je peux faire pour t'aider, c'est :
Navigateurs |Quelques Explications |----

Chrome, contrôler page actuelle / Options pour développeurs
/ Console Javascript, ----

FireFox, Outils / Console d'erreurs
et mieux : télécharger mon Site] [M'écrire] Bul

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Bul3
Messages postés
4
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
2 mai 2009
3
Merci
Bon apparemment, je crois avoir trouvé ce qui n'allait pas. Rien de tel que le "scrutage" de ligne au debugger !!

En fait le problème vient du fait que le 'innerHTML' de:
<li id="lang">fr</li>
donnait 'fr ' et non 'fr'

Je ne sais pas d'où vient cet espace...
Sachant ça, une petite regex, du split et du join et le tour est joué.
Je donne le code pour ceux que ça intéresse:


function GetLang()
{
var lang;

if (document.getElementById("lang"))
{
lang = document.getElementById("lang").innerHTML;
document.getElementById("lang").style.visibility = "hidden";
}
else
{
lang = "en";
}

var reg = new RegExp("[ ,;\\r\\n]+", "gi");

return lang.split(reg).join('').toLowerCase();
}


Par contre, le problème du design n'est pas encore résolu...

En tout cas encore merci Bul3. Je te mets réponse acceptée !

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Narvarth
Messages postés
4
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
2 mai 2009
0
Merci
Petite précision: mon site est hébergé chez Free. Je l'ai d'abord développé en local (avec WAMP) et tout se passe bien bien en local: pas de problème de design ni de javascript.
Par contre, le site en ligne présente des problèmes avec IE au niveau du design et du javascript.

Connaissez-vous les caractéristiques du(des) serveur(s) Free (version PHP, Apache, ...) ?
Commenter la réponse de cs_Narvarth
Messages postés
4
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
2 mai 2009
0
Merci
Merci pour ta réponse.
Oui je sais qu'il doit y avoir une erreur et justement j'ai utilisé FireBug et le débuggeur intégré à IE 8. Résultat: mes deux array 'days' et 'months' sont 'undifined'.
Ma question est donc: pourquoi ?

Voici les lignes qui plantent (les erreurs des deux dernières découlent de celles de deux premières):

// days pas créé
var days = Translate("days_array", lang);
// days devrait être créé mais est undefined

// idem pour months:
var months = Translate("months_array", lang);

// Forcément, après la suite ne fonctionne plus
var day = days[date.getDay()];
var month = months[date.getMonth()];
Commenter la réponse de cs_Narvarth