11402 sujets

JavaScript, DOM et API Web HTML5

Pages :
Bonjour tout le monde,

Je suis complètement désespéré Smiley decu

Cela fait depuis ce matin que je cherche sans trouver de réponse.

J'ai créé une variable globale :

var global_id_jour= null;
var global_couleur_td= null;
var global_type_ut= null;
var curX;
var curY;
var idMenu;

function menuContextuel(e, pIdMenu,id_jour,user){


J'affecte à cette variable globale une valeur :

global_id_jour = id_jour;


L'alerte m'informe que l'opération s'est bien déroulée.

alert("++++" + global_id_jour + " +++++");


Dans une autre fonction, j'essaie d'afficher le contenu de la variable globale :

 function occupe(libre_ou_occupe)
{
	alert("global_id_jour "+ global_id_jour);
 


Firefox m'indique la bonne valeur.

Internet Explorer 8 m'affiche "undefinded"

Sauriez-vous me dire ce que je dois faire pour que ma variable soit transportée d'une page à une autre s.v.p. ?

Un tout grand merci d'avance.

beegees
Modifié par beegees (10 Aug 2009 - 20:31)
Ze Nenex a écrit :
transportée d'une page à une autre s.v.p.

C'est à dire?

disponible d'une page à l'autre.

Bien à toi

beegees
Ça ne répond pas à ma question. Qu'appelle tu "page" ? S'agit-il d'une popup Javascript ? Montre moi plus de ton code.
Excuse moi :

je crée la variable globale dans cette page :

var global_id_jour= null;
var global_couleur_td= null;
var global_type_ut= null;
var curX;
var curY;
var idMenu;

function menuContextuel(e, pIdMenu,id_jour,user){
	//alert(e);
	//alert(user);
	//alert(pIdMenu);
	//alert("id_jour => " + id_jour);
	global_id_jour = id_jour;
	alert("++++" + global_id_jour + " +++++");
	if (e.button == 2){
		if(pIdMenu != ''){
			//alert(pIdMenu);
			hideMenu();
			idMenu = pIdMenu;
			getCursorPosition(e);
			//cette variable globale indique si c'est Pierre V A qui est l'utilisateur ou quelqu'un d'autre
			//j'ajoute cette ligne de code (if (user == "autre") return;) car autrement, le nom ne se met pas pour un user autre que celui qui a réservé
			//j'arrête le script si user vaut "autre", c'est miexu que de tester si le nom dans la table est identique au nom retourné par la fonction "nom"
			if (user == "autre") return;
			global_type_ut = user;
			showContextualMenu();
		}
	}else{
		hideMenu();
	}
}

function hideMenu(){
	if((idMenu != '') && (idMenu != null)){
		//alert(idMenu);
		document.getElementById('menucontextuelOccupe').style.display = 'none';
		document.getElementById('menucontextuelLibre').style.display = 'none';
		document.getElementById('menucontextuelAnnuler_Reservation').style.display = 'none';
		document.getElementById('menucontextuelAnnuler_Reservation_2').style.display = 'none';
		document.getElementById('menucontextuelProposer_Reservation').style.display = 'none';
	}
}

function showContextualMenu()
{
	//if(idMenu != ''){
		//je recupere la couleur afin de savoir quel menu je vais afficher :
		// si la case est blanche, j'affiche le menu occupe autrement j'affiche le menu libre
		
		//si c'est Firefox, il me donne une couleur RGB (pas avec IE) je transforme donc le RGB en hexa
		global_couleur_td = document.getElementById(global_id_jour).style.backgroundColor;
		
		global_couleur_td = RGBtoHex(global_couleur_td);
		//alert("la nouvelle couleur " + couleur);
		//if(navigateur == 'Netscape') alert('le navigateur n\'est pas IE ');
		
		if(global_couleur_td == "#ffffff")
		{	
			if(global_type_ut == 'PVA')
			{
				document.getElementById('menucontextuelOccupe').style.display = 'block';
				document.getElementById('menucontextuelOccupe').style.top = curY + 'px';
				document.getElementById('menucontextuelOccupe').style.left = curX + 'px';
			}
			else
			{
				document.getElementById('menucontextuelProposer_Reservation').style.display = 'block';
				document.getElementById('menucontextuelProposer_Reservation').style.top = curY + 'px';
				document.getElementById('menucontextuelProposer_Reservation').style.left = curX + 'px';
			}
		}
	
		//si la couleur est rouge
		else if(global_couleur_td == "#ff0000")
		{
			if(global_type_ut == 'PVA')
			{
				document.getElementById('menucontextuelLibre').style.display = 'block';
				document.getElementById('menucontextuelLibre').style.top = curY + 'px';
				document.getElementById('menucontextuelLibre').style.left = curX + 'px';
			}
		}
		// orange
		else if(global_couleur_td == "#ffcc00") //orange
		{
			// si Pierre clic droit sur une case orange, je lui permets d'accepter ou de refuser une demande de réservation
			// PVA => Pierre Van Antwerpen
			if(global_type_ut == 'PVA')
			{
				document.getElementById('menucontextuel_Accepter_Refuser_Reservation').style.display = 'block';
				document.getElementById('menucontextuel_Accepter_Refuser_Reservation').style.top = curY + 'px';
				document.getElementById('menucontextuel_Accepter_Refuser_Reservation').style.left = curX + 'px';
			}
			else
			{
				document.getElementById('menucontextuelAnnuler_Reservation_2').style.display = 'block';
				document.getElementById('menucontextuelAnnuler_Reservation_2').style.top = curY + 'px';
				document.getElementById('menucontextuelAnnuler_Reservation_2').style.left = curX + 'px';
			}
		}
		//ou verte
		else
		{
			if(global_type_ut == 'PVA')
			{
				document.getElementById('menucontextuelAnnuler_Reservation').style.display = 'block';
				document.getElementById('menucontextuelAnnuler_Reservation').style.top = curY + 'px';
				document.getElementById('menucontextuelAnnuler_Reservation').style.left = curX + 'px';
			}
		}
	//}
}

function getCursorPosition(e){
	//ie
	if(document.all){
		curX = event.clientX;
		curY = event.clientY;
	}
	
	//netscape 4
	if(document.layers){
		curX = e.pageX;
		curY = e.pageY;
	}
	
	//mozilla
	if(document.getElementById){
		curX = e.clientX;
		curY = e.clientY;
	}
}


et je veux que la valeur soit disponible ici :

function occupe(libre_ou_occupe)
{
	alert("global_id_jour "+ global_id_jour);
	//alert("j'arrive ici");
	//alert(' dans occupe global_id_jour ' + jour_a_traiter);
	if(libre_ou_occupe == "ESC") return false;

}


Merci d'avance pour ton aide.

beegees
Oui d'accord mais d'où vient cette dernière fonction ? Tu me parles de pages, qu'entends-tu par là ?
Ze Nenex a écrit :
Oui d'accord mais d'où vient cette dernière fonction ? Tu me parles de pages, qu'entends-tu par là ?


les deux pages (fichiers .js) sont déclarées dans la page principale :

<script type="text/javascript" src="Menu_contextuel/context.js"></script>
	<script type="text/javascript" src="AJAX/occupe.js"></script>


je ne comprends pas pourquoi ça ne fonctionne pas avec IE alors que ça fonctionne avec Firefox.
Modifié par beegees (07 Aug 2009 - 19:59)
Salut,

je dirais qu'il faut remplacer
global_id_jour = id_jour;
par
var global_id_jour = id_jour;
Salut Heyoan,

ça ne fonctionne pas :

J'ai fait ce que tu as dit :

var global_id_jour= null;
var global_couleur_td= null;
var global_type_ut= null;
var curX;
var curY;
var idMenu;

function menuContextuel(e, pIdMenu,id_jour,user){
	//alert(e);
	//alert(user);
	//alert(pIdMenu);
	//alert("id_jour => " + id_jour);
	var global_id_jour = id_jour;


Cette ligne là ne fonctionne alors plus :

global_couleur_td = document.getElementById(global_id_jour).style.backgroundColor;


message d'erreur :

a écrit :
document.getElementById(global_id_jour) is null


Encore merci pour ton aide.

beegees
Oui normal puisque ça la rend local et ce n'est pas ce que tu veux.
Question: le code fourni pour context.js est-il complet ? N'y aurait-il pas par hasard un (function() { ou quelque chose comme ça au début ?
Ce serait plus logique. Moi je pense que tout est enfermé dans un scope d'une fonction anonyme...
Ze Nenex a écrit :
Ce serait plus logique. Moi je pense que tout est enfermé dans un scope d'une fonction anonyme...
C'est peut-être l'explication effectivement... car perso je n'arrive pas à reproduire "l'erreur". Smiley murf
J'ai fait un test :


util = null;
function menuContextuel(e, pIdMenu,id_jour,user){
	//alert(e);
	//alert(user);
	//alert(pIdMenu);
	//alert("id_jour => " + id_jour);
	util = "beegees";


Dans occupé je fais un alert d'util et j'obtiens "beegees"

function occupe(libre_ou_occupe)
{
	alert("global_id_jour "+ global_id_jour);
	alert(util);
Smiley eek

Qu'en pensez-vous ?

Quelqu'un veut tester le site ?

beegees
Modifié par beegees (07 Aug 2009 - 20:25)
beegees a écrit :
Qu'en pensez-vous ?
Ben à priori cela règle la question non ? As-tu essayé de virer le var devant global_id_jour (normalement cela suffit à rendre une variable globale).
Rends les variables globales de context.js en ôtant tous les "var" comme te l'a dit Heyoan, tu n'auras plus aucun problème


Oops. Smiley edit Modifié par Ze Nenex (07 Aug 2009 - 20:27)
Ze Nenex a écrit :
Rends les variables globales de context.js en ôtant tous les "var" comme te l'a dit Heyoan, tu n'auras plus aucun problème



Depuis ce matin je travaille là dessus.

J'avais bien sûr fait en sorte de ne pas avoir var devant le nom de la variable mais après une lecture sur internet, je l'avais mis.

Voici le code :

//global_id_jour => variable globale qui contient l'id de la td sélectionnée
global_id_jour= null;
global_couleur_td= null;
global_type_ut= null;
curX=null;
curY=null;
idMenu=null;
util = null;

function menuContextuel(e, pIdMenu,id_jour,user){
	//alert(e);
	//alert(user);
	//alert(pIdMenu);
	//alert("id_jour => " + id_jour);
	util = "beegees";
	global_id_jour = id_jour;
	if (e.button == 2){
		if(pIdMenu != ''){
			//alert(pIdMenu);
			hideMenu();
			idMenu = pIdMenu;
			getCursorPosition(e);
			//cette variable globale indique si c'est Pierre V A qui est l'utilisateur ou quelqu'un d'autre
			//j'ajoute cette ligne de code (if (user == "autre") return;) car autrement, le nom ne se met pas pour un user autre que celui qui a réservé
			//j'arrête le script si user vaut "autre", c'est miexu que de tester si le nom dans la table est identique au nom retourné par la fonction "nom"
			if (user == "autre") return;
			global_type_ut = user;
			showContextualMenu();
		}
	}else{
		hideMenu();
	}
}

function hideMenu(){
	if((idMenu != '') && (idMenu != null)){
		//alert(idMenu);
		document.getElementById('menucontextuelOccupe').style.display = 'none';
		document.getElementById('menucontextuelLibre').style.display = 'none';
		document.getElementById('menucontextuelAnnuler_Reservation').style.display = 'none';
		document.getElementById('menucontextuelAnnuler_Reservation_2').style.display = 'none';
		document.getElementById('menucontextuelProposer_Reservation').style.display = 'none';
	}
}

function showContextualMenu()
{
	//if(idMenu != ''){
		//je recupere la couleur afin de savoir quel menu je vais afficher :
		// si la case est blanche, j'affiche le menu occupe autrement j'affiche le menu libre
		
		//si c'est Firefox, il me donne une couleur RGB (pas avec IE) je transforme donc le RGB en hexa
		global_couleur_td = document.getElementById(global_id_jour).style.backgroundColor;
		
		global_couleur_td = RGBtoHex(global_couleur_td);
		//alert("la nouvelle couleur " + couleur);
		//if(navigateur == 'Netscape') alert('le navigateur n\'est pas IE ');
		
		if(global_couleur_td == "#ffffff")
		{	
			if(global_type_ut == 'PVA')
			{
				document.getElementById('menucontextuelOccupe').style.display = 'block';
				document.getElementById('menucontextuelOccupe').style.top = curY + 'px';
				document.getElementById('menucontextuelOccupe').style.left = curX + 'px';
			}
			else
			{
				document.getElementById('menucontextuelProposer_Reservation').style.display = 'block';
				document.getElementById('menucontextuelProposer_Reservation').style.top = curY + 'px';
				document.getElementById('menucontextuelProposer_Reservation').style.left = curX + 'px';
			}
		}
	
		//si la couleur est rouge
		else if(global_couleur_td == "#ff0000")
		{
			if(global_type_ut == 'PVA')
			{
				document.getElementById('menucontextuelLibre').style.display = 'block';
				document.getElementById('menucontextuelLibre').style.top = curY + 'px';
				document.getElementById('menucontextuelLibre').style.left = curX + 'px';
			}
		}
		// orange
		else if(global_couleur_td == "#ffcc00") //orange
		{
			// si Pierre clic droit sur une case orange, je lui permets d'accepter ou de refuser une demande de réservation
			// PVA => Pierre Van Antwerpen
			if(global_type_ut == 'PVA')
			{
				document.getElementById('menucontextuel_Accepter_Refuser_Reservation').style.display = 'block';
				document.getElementById('menucontextuel_Accepter_Refuser_Reservation').style.top = curY + 'px';
				document.getElementById('menucontextuel_Accepter_Refuser_Reservation').style.left = curX + 'px';
			}
			else
			{
				document.getElementById('menucontextuelAnnuler_Reservation_2').style.display = 'block';
				document.getElementById('menucontextuelAnnuler_Reservation_2').style.top = curY + 'px';
				document.getElementById('menucontextuelAnnuler_Reservation_2').style.left = curX + 'px';
			}
		}
		//ou verte
		else
		{
			if(global_type_ut == 'PVA')
			{
				document.getElementById('menucontextuelAnnuler_Reservation').style.display = 'block';
				document.getElementById('menucontextuelAnnuler_Reservation').style.top = curY + 'px';
				document.getElementById('menucontextuelAnnuler_Reservation').style.left = curX + 'px';
			}
		}
	//}
}

function getCursorPosition(e){
	//ie
	if(document.all){
		curX = event.clientX;
		curY = event.clientY;
	}
	
	//netscape 4
	if(document.layers){
		curX = e.pageX;
		curY = e.pageY;
	}
	
	//mozilla
	if(document.getElementById){
		curX = e.clientX;
		curY = e.clientY;
	}
}


j'obtiens avec IE :

Undefined

et

beegees

La valeur brute passe, pas la variable.

Merci pour votre dévouement.

beegees
Heyoan a écrit :
Ben à priori cela règle la question non ? As-tu essayé de virer le var devant global_id_jour (normalement cela suffit à rendre une variable globale).


je suis sur une nouvelle piste mais je dois avouer que c'est complètement dingue, peut être que tu auras une explication à cela :


global_couleur_td = document.getElementById(global_id_jour).style.backgroundColor;
alert("couleur " + global_couleur_td);


Si je laisse l'alerte, l'alerte s'affiche avec la bonne valeur avec ce code :



function occupe(libre_ou_occupe)
{
	alert(" ==> 2 ici global_id_jour "+ global_id_jour);


Si je retire l'alerte, j'ai undefined Smiley eek

Vous avez déjà rencontré ce genre de problème ?

Merci beaucoup.

beegees
Heyoan a écrit :
En fait l'idée de voir la page en ligne était une bonne idée...


je t'ai envoyé un MP

beegees
Pages :