Problème de Variables
tilous
Messages postés
2
Statut
Membre
-
PhP Messages postés 1774 Statut Membre -
PhP Messages postés 1774 Statut Membre -
Bonjour à tous,
J'ai un problème de réutilisation de variable défini dans un fichier.js
Dans mon fichier.js, j'ai une variable nommée var indiceBloc;
Je veux utiliser cette variable pour stocker la valeur d'une sélection dans une liste qui elle est situé sur une page nommée ChoixBlocs.
Ce que j'ai besoin de faire c'est d'insérer la valeur de l'index sélectonné et d'attribuer cette valeur à ma variable indiceBloc qui est dans mon fichier.js, mais attention cette valeur doit-être réutilisée dans une autre page nommée ChoixMot...
je tourne en rond, je viens tout juste de commencer à apprendre le javascript et la je suis perdue.
SVP à l'aide! j'essaie de faire un petit programme intéractif sur ma page web pour aider mon fils dans ces leçons de mots de vocabulaire.
//Voici mon code à date
// fichier.js
// sera utilisé dans page mot et pour la correction dans une autre page.
var indiceMot;
// Utiliser dans la page choixBloc et la page mot et probablement pour la correction aussi.
var indiceBloc;
// contient le # des blocs à étudier
tabBlocs=["Bloc1","Bloc2","Bloc3"];
//Les tableau contiennent les mots de chacun des blocs
tabMotsBloc1=["septembre","troisième","écrire","malheureux","malheureuse","point","penser","toucher","regarder","voisin","voisine"];
tabMotsBloc2=["bois","marcher","dessus","dessous","forêt","s'en va","en bas","est","ouest","nord","sud","s'en vont"];
tabMotsBloc3=["près","à droite","à gauche","droit","droite","c'est","gauche","automne","branche","champ","seul","seule"];
// regroupement des tableaux en un tableau multi
tabMotsBlocs=[tabMotsBloc1,tabMotsBloc2,tabMotsBloc3];
//code contenu dans la page web ChoixBlocs
<head>
<SCRIPT LANGUAGE="JavaScript" SRC="Tableaux.js"></SCRIPT>
</head>
// voici une partie du code dans body
<select name="choixBloc" size="tabBlocs.length" onchange="Selection()">
<option>Faite votre choix !</option>
<SCRIPT>// ici je remplie la liste le tableau tabBlocs
for(i=0; i<tabBlocs.length; i++){
document.write('<option value="'+i+'">'+tabBlocs[i]+'</option>');
}
</script>
</select>
<script>
function Selection(){
// ici est mon problème je voudrais que la valeur reste dans le fichier.js
indiceBloc.value=formulaire.choixBloc.selectedIndex;
// ici j'ouvre ma nouvelle page, mais la valeur n'est plus disponible, suite à l'ouverture lorsque je veux réutiliser indiceBloc
location.href= "Mot.html";
}
</script>
</body>
// Voici le code de la page Mot qui doit recevoir la valeur de l'indiceBloc
<head>
<SCRIPT LANGUAGE="JavaScript" SRC="Tableaux.js"></SCRIPT>
</head>
//ajustement de la liste
<select name="choisListe" size="tabMotsBlocs[indiceBloc].length">
<option selected>Fais ton choix !</option>
<SCRIPT>
// ceci me permet d'utiliser le tableau multi pour remplir ma liste de mots, car ça dépend du choix du bloc que l'enfant aura choisi.
for(i=0; i<tabMotsBlocs[indiceBloc-1].length; i++){
document.write('<option value="'+i+'">'+tabMotsBlocs[indiceBloc-1][i]+'</option>'});
</script>
</select>
</body>
Je vous remercie d'avance de l'aide que vous pourrez m'apporter
j'espère que vous saurez comprendre mon code.
bye bye
Louise
J'ai un problème de réutilisation de variable défini dans un fichier.js
Dans mon fichier.js, j'ai une variable nommée var indiceBloc;
Je veux utiliser cette variable pour stocker la valeur d'une sélection dans une liste qui elle est situé sur une page nommée ChoixBlocs.
Ce que j'ai besoin de faire c'est d'insérer la valeur de l'index sélectonné et d'attribuer cette valeur à ma variable indiceBloc qui est dans mon fichier.js, mais attention cette valeur doit-être réutilisée dans une autre page nommée ChoixMot...
je tourne en rond, je viens tout juste de commencer à apprendre le javascript et la je suis perdue.
SVP à l'aide! j'essaie de faire un petit programme intéractif sur ma page web pour aider mon fils dans ces leçons de mots de vocabulaire.
//Voici mon code à date
// fichier.js
// sera utilisé dans page mot et pour la correction dans une autre page.
var indiceMot;
// Utiliser dans la page choixBloc et la page mot et probablement pour la correction aussi.
var indiceBloc;
// contient le # des blocs à étudier
tabBlocs=["Bloc1","Bloc2","Bloc3"];
//Les tableau contiennent les mots de chacun des blocs
tabMotsBloc1=["septembre","troisième","écrire","malheureux","malheureuse","point","penser","toucher","regarder","voisin","voisine"];
tabMotsBloc2=["bois","marcher","dessus","dessous","forêt","s'en va","en bas","est","ouest","nord","sud","s'en vont"];
tabMotsBloc3=["près","à droite","à gauche","droit","droite","c'est","gauche","automne","branche","champ","seul","seule"];
// regroupement des tableaux en un tableau multi
tabMotsBlocs=[tabMotsBloc1,tabMotsBloc2,tabMotsBloc3];
//code contenu dans la page web ChoixBlocs
<head>
<SCRIPT LANGUAGE="JavaScript" SRC="Tableaux.js"></SCRIPT>
</head>
// voici une partie du code dans body
<select name="choixBloc" size="tabBlocs.length" onchange="Selection()">
<option>Faite votre choix !</option>
<SCRIPT>// ici je remplie la liste le tableau tabBlocs
for(i=0; i<tabBlocs.length; i++){
document.write('<option value="'+i+'">'+tabBlocs[i]+'</option>');
}
</script>
</select>
<script>
function Selection(){
// ici est mon problème je voudrais que la valeur reste dans le fichier.js
indiceBloc.value=formulaire.choixBloc.selectedIndex;
// ici j'ouvre ma nouvelle page, mais la valeur n'est plus disponible, suite à l'ouverture lorsque je veux réutiliser indiceBloc
location.href= "Mot.html";
}
</script>
</body>
// Voici le code de la page Mot qui doit recevoir la valeur de l'indiceBloc
<head>
<SCRIPT LANGUAGE="JavaScript" SRC="Tableaux.js"></SCRIPT>
</head>
//ajustement de la liste
<select name="choisListe" size="tabMotsBlocs[indiceBloc].length">
<option selected>Fais ton choix !</option>
<SCRIPT>
// ceci me permet d'utiliser le tableau multi pour remplir ma liste de mots, car ça dépend du choix du bloc que l'enfant aura choisi.
for(i=0; i<tabMotsBlocs[indiceBloc-1].length; i++){
document.write('<option value="'+i+'">'+tabMotsBlocs[indiceBloc-1][i]+'</option>'});
</script>
</select>
</body>
Je vous remercie d'avance de l'aide que vous pourrez m'apporter
j'espère que vous saurez comprendre mon code.
bye bye
Louise
A voir également:
- Problème de Variables
- Variable objet ou variable de bloc with non définie - Forum VB / VBA
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp ✓ - Forum Word
- Variable objet ou bloc "with" non définie - Forum VB / VBA
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
- Modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ✓ - Forum Python
2 réponses
Salut Louise,
Oops ! Tu es dans l'erreur ! Ca ne marche pas de cette façon ...
Mais pourquoi diable ça ne marche pas ?
Heureusement tu es sur CCM !
Les pages HTML sont indépendantes les unes des autres et le code JS qu'elles contiennent également !
Ainsi la syntaxe :
<SCRIPT LANGUAGE="JavaScript" SRC="Tableaux.js"></SCRIPT>
te permet d'utiliser le même code sur plusieurs pages HTML mais ni le code et encore moins les variables qu'il contient ne sont mis en commun !
En fait chaque page insère le contenu du fichier Tableaux.js comme s'il faisait partie intégrante de son propre code.
Le code est donc intégralement rechargé pour chaque page ainsi que les variables. Lorsqu'une page est fermée, ses variables JS sont également détruites.
Tes pages Choixmots.htm & Mot.htm ont donc chacune leur propre version de tes différents tableaux et ne se "parlent" pas !
Les scripts externes ne sont pas des unités que les pages html qui les références mettent en commun !
C'est bien dommage, je te l'accorde, mais c'est ainsi ...
Avantages de scripts externes :
- un seul code à maintenir
- le fichier .js est normalement chargé une seule fois puis ensuite rechargé directement depuis le cache du navigateur d'où un gain de temps
- taille des pages HTML réduite d'autant : encore du temps de gagné
Alors il n'y a pas de solution ?
Mais si bien sûr ! ;:-) Ouf !
Qui dit pages indépendantes ne veut pas dire qu'il n'existe pas un moyen d'échanger des informations.
En fait selon que tu utilises ou non des cadres, que tu fermes ou non la page avant d'appeler la suivante il existe plusieurs façons de transmettre des paramètres.
1) Echange de paramètre entre fenêtre (ou page) parent et fenêtre enfant
Un page B peut accèder aux variables JS d'une page A sous réserve que :
- la page B connaîsse l'adresse de la page A (en fait un pointeur vers cette page A)
Si on se limite à seulement 2 pages, le seul moyen pour la page B de connaître la page A (sauf utilisation des cadres) est d'avoir tout simplement été ouverte par celle-ci. On dit que la page A est la fenêtre parent et la page B la fenêtre enfant.
- la page A soit ouverte !
Les pages A et B doivent donc être ouvertes simultanément.
Il apparaît donc que l'emploi de la syntaxe ...location.href= est à proscrire puisqu'elle ferme la fenêtre de base.
A la place il faut utiliser window.open()
Que dirais-tu d'un petit exemple ?
Fenêtre parent : choixmots.htm
Fenêtre enfant : mot.htm
Code pour choixmots.htm :
<html>
<title>choixmots</title>
<head>
<script language="Javascript">
<!--
var ma_variable="tilous";
function init_form()
{
// Initialise le contenu du champ "nom" avec la variable ma_variable
document.test.nom.value=ma_variable
}
function ouvrir_mot()
{
// Ouvre la fenêtre mot.htm : choixmots.htm est la fenêtre parente !
fen_mot=window.open("mot.htm")
}
-->
</script>
</head>
<body onload="init_form()">
Passage de variables en utilisant la relation fenêtre parent - fenêtre enfant
<form name="test">
La variable nommée <b>ma_variable</b> définie sur cette page contient : <input type="text" value="" maxlength=20 size=20 name="nom">
<input type="button" value="Cliquer pour ouvrir la page mot.htm" onclick="ouvrir_mot()">
</form>
</body>
</html>
Remarque l'emploi de window.open("mot.htm")
Code pour mot.htm :
<html>
<title>mots</title>
<head>
<script language="Javascript">
<!--
function init_form()
{
// Initialise le contenu du champ "nom" avec la variable ma_variable
// définie dans la page parente
document.test.nom.value=window.opener.ma_variable
}
-->
</script>
</head>
<body onload="init_form()">
Récupèration de variables en accèdant à la fenêtre parente : choixmots.htm
<form name="test">
La variable nommée <b>ma_variable</b> récupérée sur la page choixmots contient : <input type="text" value="" maxlength=20 size=20 name="nom">
</form>
</body>
</html>
En JS il existe une variable toute faite qui te renvoie ce fameux pointeur vers la fenêtre parent : window.opener
Ici window.opener pointe directement vers la page choixmots.htm
On a alors un accès totale sur la page choixmots.htm non seulement aux variables mais aussi au code : par ex on peut fermer la page choixmots.htm depuis la page mot.htm en indiquant window.opener.close() !
Plutôt cool, non ?
Nota : l'échange en utilisant les cadres reposes sur le même principe.
Soit les variables sont stockées directement dans la page qui contient le jeux de cadre dans ce cas pour accèder à son adresse depuis une page contenu dans un des cadres :
window.parent.[variable_du_jeux_de_cadres]
On utilise parent et pas opener ! En effet opener ne marche qu'avec les pages qui ont été ouvertes par la fct window.open() !
Ce qui n'est pas la cas des pages contenues dans le jeu de cadres.
Soit on accède aux différentes pages du cadre en utilisant le nom de chaque cadre :
window.parent.[nom_du_cadre].[nom_variable_de_la_page]
A suivre ...
@+
Philippe
[[ The Truth is Out There ]]
Oops ! Tu es dans l'erreur ! Ca ne marche pas de cette façon ...
Mais pourquoi diable ça ne marche pas ?
Heureusement tu es sur CCM !
Les pages HTML sont indépendantes les unes des autres et le code JS qu'elles contiennent également !
Ainsi la syntaxe :
<SCRIPT LANGUAGE="JavaScript" SRC="Tableaux.js"></SCRIPT>
te permet d'utiliser le même code sur plusieurs pages HTML mais ni le code et encore moins les variables qu'il contient ne sont mis en commun !
En fait chaque page insère le contenu du fichier Tableaux.js comme s'il faisait partie intégrante de son propre code.
Le code est donc intégralement rechargé pour chaque page ainsi que les variables. Lorsqu'une page est fermée, ses variables JS sont également détruites.
Tes pages Choixmots.htm & Mot.htm ont donc chacune leur propre version de tes différents tableaux et ne se "parlent" pas !
Les scripts externes ne sont pas des unités que les pages html qui les références mettent en commun !
C'est bien dommage, je te l'accorde, mais c'est ainsi ...
Avantages de scripts externes :
- un seul code à maintenir
- le fichier .js est normalement chargé une seule fois puis ensuite rechargé directement depuis le cache du navigateur d'où un gain de temps
- taille des pages HTML réduite d'autant : encore du temps de gagné
Alors il n'y a pas de solution ?
Mais si bien sûr ! ;:-) Ouf !
Qui dit pages indépendantes ne veut pas dire qu'il n'existe pas un moyen d'échanger des informations.
En fait selon que tu utilises ou non des cadres, que tu fermes ou non la page avant d'appeler la suivante il existe plusieurs façons de transmettre des paramètres.
1) Echange de paramètre entre fenêtre (ou page) parent et fenêtre enfant
Un page B peut accèder aux variables JS d'une page A sous réserve que :
- la page B connaîsse l'adresse de la page A (en fait un pointeur vers cette page A)
Si on se limite à seulement 2 pages, le seul moyen pour la page B de connaître la page A (sauf utilisation des cadres) est d'avoir tout simplement été ouverte par celle-ci. On dit que la page A est la fenêtre parent et la page B la fenêtre enfant.
- la page A soit ouverte !
Les pages A et B doivent donc être ouvertes simultanément.
Il apparaît donc que l'emploi de la syntaxe ...location.href= est à proscrire puisqu'elle ferme la fenêtre de base.
A la place il faut utiliser window.open()
Que dirais-tu d'un petit exemple ?
Fenêtre parent : choixmots.htm
Fenêtre enfant : mot.htm
Code pour choixmots.htm :
<html>
<title>choixmots</title>
<head>
<script language="Javascript">
<!--
var ma_variable="tilous";
function init_form()
{
// Initialise le contenu du champ "nom" avec la variable ma_variable
document.test.nom.value=ma_variable
}
function ouvrir_mot()
{
// Ouvre la fenêtre mot.htm : choixmots.htm est la fenêtre parente !
fen_mot=window.open("mot.htm")
}
-->
</script>
</head>
<body onload="init_form()">
Passage de variables en utilisant la relation fenêtre parent - fenêtre enfant
<form name="test">
La variable nommée <b>ma_variable</b> définie sur cette page contient : <input type="text" value="" maxlength=20 size=20 name="nom">
<input type="button" value="Cliquer pour ouvrir la page mot.htm" onclick="ouvrir_mot()">
</form>
</body>
</html>
Remarque l'emploi de window.open("mot.htm")
Code pour mot.htm :
<html>
<title>mots</title>
<head>
<script language="Javascript">
<!--
function init_form()
{
// Initialise le contenu du champ "nom" avec la variable ma_variable
// définie dans la page parente
document.test.nom.value=window.opener.ma_variable
}
-->
</script>
</head>
<body onload="init_form()">
Récupèration de variables en accèdant à la fenêtre parente : choixmots.htm
<form name="test">
La variable nommée <b>ma_variable</b> récupérée sur la page choixmots contient : <input type="text" value="" maxlength=20 size=20 name="nom">
</form>
</body>
</html>
En JS il existe une variable toute faite qui te renvoie ce fameux pointeur vers la fenêtre parent : window.opener
Ici window.opener pointe directement vers la page choixmots.htm
On a alors un accès totale sur la page choixmots.htm non seulement aux variables mais aussi au code : par ex on peut fermer la page choixmots.htm depuis la page mot.htm en indiquant window.opener.close() !
Plutôt cool, non ?
Nota : l'échange en utilisant les cadres reposes sur le même principe.
Soit les variables sont stockées directement dans la page qui contient le jeux de cadre dans ce cas pour accèder à son adresse depuis une page contenu dans un des cadres :
window.parent.[variable_du_jeux_de_cadres]
On utilise parent et pas opener ! En effet opener ne marche qu'avec les pages qui ont été ouvertes par la fct window.open() !
Ce qui n'est pas la cas des pages contenues dans le jeu de cadres.
Soit on accède aux différentes pages du cadre en utilisant le nom de chaque cadre :
window.parent.[nom_du_cadre].[nom_variable_de_la_page]
A suivre ...
@+
Philippe
[[ The Truth is Out There ]]
Salut Louise,
Suite et fin !
Bizarrement mon msg ne passe pas en entier !
2) Passage de paramètres dans l'URL
Cette méthode est certainement la plus utilisée !
Elle permet à une page A de transmettre des paramètres à une page B même si la page A est ensuite fermée : ce qui est ton cas ;:-)
Et un second ex pour faire bonne mesure ...
Code pour choixmots.htm :
<html>
<title>choixmots</title>
<head>
<script language="Javascript">
<!--
var ma_variable="tilous";
function init_form()
{
// Initailise le contenu du champ "nom" avec la variable ma_variable
document.test.nom.value=ma_variable
}
function ouvrir_mot()
{
// Passe la varibale ma_varaible comme paramètre dans l'URL
window.location.href="mot.htm?ma_variable="+ma_variable
}
-->
</script>
</head>
<body onload="init_form()">
Passage de paramètres via l'URL
<form name="test">
La variable nommée <b>ma_variable</b> définie sur cette page contient : <input type="text" value="" maxlength=20 size=20 name="nom">
<input type="button" value="Cliquer pour ouvrir la page mot.htm" onclick="ouvrir_mot()">
</form>
</body>
</html>
Ici on utilise bien location.href=... mais en plus on passe des paramètres après l'adresse de la page. Un '?' indique la fin de l'adresse de la page elle-même et le début des paramètres éventuels.
Nota si plusieurs paramètres doivent être transmis il faut les séparer par un '&'
Ex : hrel.location="mot.htm?param1=10¶m2=20"
Code pour mot :
<html>
<title>mots</title>
<head>
<script language="Javascript">
<!--
// Recherche du paramètre passé dans l'url portant le nom param_id
function getUrlParam(param_id)
{
// Récupére les paramètres passés dans l'url dans un tableau
var paramArray=window.location.search.substr(1).split("&")
var param=null
for (var i=0; i < paramArray.length; i++)
{
if (paramArray[i].indexOf(param_id)==0)
{
var j=paramArray[i].indexOf("=")
if (j!=-1) param=paramArray[i].substr(j+1)
break
}
}
return param
}
var ma_variable=getUrlParam("ma_variable")
function init_form()
{
// Initialise le contenu du champ "nom" avec la variable ma_variable
// définie dans l'URL
document.test.nom.value=ma_variable
}
-->
</script>
</head>
<body onload="init_form()">
Récupèration de variables passées dans l'URL
<form name="test">
La variable nommée <b>ma_variable</b> récupérée dans l'URL contient : <input type="text" value="" maxlength=20 size=20 name="nom">
</form>
</body>
</html>
Là ça se corse un peu !
La récupèration des paramètres transmis est assurée par la fct
getUrlParam(param_id)
Elle permet de retrouver n'importe quel paramètre transmis dans la chaîne de caractère qui suit l'URL (tout ce qui suit le ? dans l'adresse) pour peu que la syntaxe 'parametre=valeur' soit respectée.
La notation parametre=valeur n'est qu'une convention ! Rien n'est imposé. Il faut bien comprendre que c'est simplement une chaîne de caractères qui est transmise en même temps que l'adresse.
Le navigateur ne l'interprète pas !
Il se contente de la stocker dans la variable prédéfinie :
window.location.search et c'est tout !
A toi de faire le travail d'extraction ensuite ... d'où ma fonction.
Voilà.
@+
Philippe
[[ The Truth is Out There ]]
[[ The Truth is Out There ]]
Suite et fin !
Bizarrement mon msg ne passe pas en entier !
2) Passage de paramètres dans l'URL
Cette méthode est certainement la plus utilisée !
Elle permet à une page A de transmettre des paramètres à une page B même si la page A est ensuite fermée : ce qui est ton cas ;:-)
Et un second ex pour faire bonne mesure ...
Code pour choixmots.htm :
<html>
<title>choixmots</title>
<head>
<script language="Javascript">
<!--
var ma_variable="tilous";
function init_form()
{
// Initailise le contenu du champ "nom" avec la variable ma_variable
document.test.nom.value=ma_variable
}
function ouvrir_mot()
{
// Passe la varibale ma_varaible comme paramètre dans l'URL
window.location.href="mot.htm?ma_variable="+ma_variable
}
-->
</script>
</head>
<body onload="init_form()">
Passage de paramètres via l'URL
<form name="test">
La variable nommée <b>ma_variable</b> définie sur cette page contient : <input type="text" value="" maxlength=20 size=20 name="nom">
<input type="button" value="Cliquer pour ouvrir la page mot.htm" onclick="ouvrir_mot()">
</form>
</body>
</html>
Ici on utilise bien location.href=... mais en plus on passe des paramètres après l'adresse de la page. Un '?' indique la fin de l'adresse de la page elle-même et le début des paramètres éventuels.
Nota si plusieurs paramètres doivent être transmis il faut les séparer par un '&'
Ex : hrel.location="mot.htm?param1=10¶m2=20"
Code pour mot :
<html>
<title>mots</title>
<head>
<script language="Javascript">
<!--
// Recherche du paramètre passé dans l'url portant le nom param_id
function getUrlParam(param_id)
{
// Récupére les paramètres passés dans l'url dans un tableau
var paramArray=window.location.search.substr(1).split("&")
var param=null
for (var i=0; i < paramArray.length; i++)
{
if (paramArray[i].indexOf(param_id)==0)
{
var j=paramArray[i].indexOf("=")
if (j!=-1) param=paramArray[i].substr(j+1)
break
}
}
return param
}
var ma_variable=getUrlParam("ma_variable")
function init_form()
{
// Initialise le contenu du champ "nom" avec la variable ma_variable
// définie dans l'URL
document.test.nom.value=ma_variable
}
-->
</script>
</head>
<body onload="init_form()">
Récupèration de variables passées dans l'URL
<form name="test">
La variable nommée <b>ma_variable</b> récupérée dans l'URL contient : <input type="text" value="" maxlength=20 size=20 name="nom">
</form>
</body>
</html>
Là ça se corse un peu !
La récupèration des paramètres transmis est assurée par la fct
getUrlParam(param_id)
Elle permet de retrouver n'importe quel paramètre transmis dans la chaîne de caractère qui suit l'URL (tout ce qui suit le ? dans l'adresse) pour peu que la syntaxe 'parametre=valeur' soit respectée.
La notation parametre=valeur n'est qu'une convention ! Rien n'est imposé. Il faut bien comprendre que c'est simplement une chaîne de caractères qui est transmise en même temps que l'adresse.
Le navigateur ne l'interprète pas !
Il se contente de la stocker dans la variable prédéfinie :
window.location.search et c'est tout !
A toi de faire le travail d'extraction ensuite ... d'où ma fonction.
Voilà.
@+
Philippe
[[ The Truth is Out There ]]
[[ The Truth is Out There ]]