Rechercher : dans
Par :

Problème de portée de variable javascript ?

Dernière réponse le 27 mar 2008 à 09:19:41 FabienCC, le 26 mar 2008 à 21:50:52 
 Signaler ce message aux modérateurs

Bonjour,

Je tente d'écrire un javascript pour lire le contenu d'un cookie et lier une page CSS en conséquence. La valeur du cookie est fixée par ailleurs (à l'entrée du site).

J'en suis là :

<head>
<script type="text/javascript">

CSScookValue = "" ;

function GetCookie ()
{
var egal = document.cookie.indexOf( "=" ) ;
CSScookValue = document.cookie.substring ( egal + 1 ) ;
if ( CSScookValue == "" ) {CSScookValue = 2 ;}//en l'absence de cookie, met la valeur par défaut à 2
}

if (CSScookValue == 1)
{
document.write ('<link rel="stylesheet" type="text/css" media="screen" href="../css/css1.css" />')
}
else {
if (CSScookValue == 2)
{
document.write ('<link rel="stylesheet" type="text/css" media="screen" href="../css/css2.css" />')
}
}
</script>
</head>
<body onLoad="GetCookie()">
texte témoin pour voir l'effet de la CSS chargée
</body>
</html>


Mais cela ne marche pas. Je pense qu'en fait, ma variable CSScookValue est remise à zéro dès que je sors de la fonction dans laquelle elle est acquise. Et si je mets mon IF de sélection CSS dans cette fonction, le navigateur boucle dans le vide (j'imagine que charger une css dans un fonction "onload" n'est pas possible (ça se mord la queue..).

J'ai essayé pas mal de chose, mais ma connaissance javascript n'est pas suffisante.

Si quelqu'un peut me donner un coup de main, cela serait très sympa.

Merci d'avance.

Configuration: Windows Vista
Internet Explorer 7.0

Meilleures réponses pour « Problème de portée de variable javascript ? » dans :
Javascript - Les variables Voir Le concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. En Javascript, les noms de variables peuvent être aussi long que l'on désire,...
[WiFi] Réseau sans fil et sécurité VoirDéfinition Infrastructure réseau Sécurité Définition Le Wifi est une technologie permettant de créer des réseaux informatiques sans fil (Wireless). Il s'agit d'une norme de l'IEEE baptisée 802.11. Sa portée varie d'un appareil à...
[Shell] Tester une variable numérique VoirTester une variable numérique    Préambule Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères". De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à...
Javascript - l'objet Array VoirLes particularités de l'objet Array L'objet Array est un objet du noyau Javascript permettant de créer et de manipuler des tableaux. Voici la syntaxe à utiliser pour créer une variable tableau : var x = new Array(element1[, element2, ...]); Si...
Javascript - Introduction au langage Javascript VoirQu'est-ce que le Javascript? Le Javascript est un langage de script incorporé dans un document HTML. Historiquement il s'agit même du premier langage de script pour le Web. Ce langage est un langage de programmation qui permet d'apporter des...
Javascript - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Cette notion de sous-programme est généralement appelée fonction...

1

carbon3, le 27 mar 2008 à 02:16:45
  • +2

Salut,
voilà un arrangement qui fonctionne. Le truc c'est de définir l'appel au rel style avant de rentrer dans le body bien sûr. En sortant ton sélecteur du mode function, il est directement traité au niveau du head...

<html>
<head> 
<script language="javascript">
CSScookValue = "" ; 
var egal = document.cookie.indexOf( "=" ) ; 
CSScookValue = document.cookie.substring ( egal + 1 ) ; 
if ( CSScookValue == "" ) {
	CSScookValue = 2 ;
}//en l'absence de cookie, met la valeur par défaut à 2 

if (CSScookValue == 1) { 
	document.write ('<link rel="stylesheet" type="text/css" media="screen" href="css1.css" />');
} 
else { 
	document.write ('<link rel="stylesheet" type="text/css" media="screen" href="css2.css" />');
}
</script>
</head> 
<body> 
texte témoin pour voir l'effet de la CSS chargée 
</body> 
</html>

bonne chance pour la suite
;-)

Répondre à carbon3

2

FabienCC, le 27 mar 2008 à 09:11:27

Merci Carbon3 !

Effectivement, c'est tout simple, mais je n'y aurais jamais pensé. Merci beaucoup.

Une petite question bonus pour clore mon petit sélecteur CSS :

Pour choisir son style CSS, j'utilise un onClick="SetCookie(x)" implanté dans un <a>. Le x étant la fameuse variable que je récupère avec ton script. Ca ressemble à ça :

<a href="#" onClick="SetCookie(1)"><img src="fleche-right.gif" width="32" height="32" /></a>

Donc, je voudrais savoir ce que je dois rajouter pour recharger la page courante afin de charger la nouvelle CSS.Et où dois-je le rajouter ? dans la fonction setcookie ? dans mon <a> ?

Merci d'avance.

Répondre à FabienCC

3

 FabienCC, le 27 mar 2008 à 09:19:41

Je viens de trouver la réponse à ma question concernant le rechargement de la page :

il suffit de transformer :
<a href="#" onClick="SetCookie(1)"><img src="fleche-right.gif" width="32" height="32" /></a>

en
<a href="javascript:location.reload()" onClick="SetCookie(1)"><img src="fleche-right.gif" width="32" height="32" /></a>

C'est tout simple.

Merci encore Carbon3.

bye

Répondre à FabienCC