OVH Cloud OVH Cloud

Recharger une div d'une page

35 réponses
Avatar
sympatix
Bonjour !

J'ai une page contenant 2 frames, et je voudrais pouvoir recharger une div
avec ses éléments par défauts.
La div se trouve dans la frame du bas, et se pilote depuis la frame du haut.
Je me suis dit qu'en utilisant la méthode "reload", ce serais du gâteau,
mais ça ne fonctionne pas. Rien ne se passe en cliquant sur le bouton
"recharge". C'est clair, je ne m'y prends pas comme il faut !
(c'est la fonction recharge dans la pagehaut qui pose problème).

Voici le code des 3 pages:

--------page principale------------------
<html>
<head>
</HEAD>
<FRAMESET ROWS="80%,20%">
<FRAME SRC="pagehaut.htm" NAME="haut">
<FRAME SRC="pagebas.htm" NAME="bas">
</FRAMESET>
<body>
</body>
</HTML>

--------pagehaut------------------
<html>
<head>
<script>

function changetxt()
{
// on récupère la frame du bas
var v_frame = window.parent.frames[1];
v_frame.document.all.divtest.innerHTML="nouveau texte"
}

function recharge()
{
var v_frame = window.parent.frames[1];
v_frame.document.all.divtest.reload;
}

</SCRIPT>

</HEAD>
<body>
page du haut<br>

<input type="button" onclick="changetxt();" value="change">
<input type="button" onclick="recharge();" value="recharge">
</body>
</HTML>

-----pagebas--------
<html>
<head>
</HEAD>
<body>
page du bas
<div id="divtest">texte par défaut qui change</div>
</body>
</HTML>
--------------------

Merci d'avance :-)
--
Cordialement
Sympatix
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)

10 réponses

1 2 3 4
Avatar
Jean
Bonjour !

J'ai une page contenant 2 frames, et je voudrais pouvoir recharger une div
avec ses éléments par défauts.
La div se trouve dans la frame du bas, et se pilote depuis la frame du haut.
Je me suis dit qu'en utilisant la méthode "reload", ce serais du gâteau,
mais ça ne fonctionne pas. Rien ne se passe en cliquant sur le bouton
"recharge". C'est clair, je ne m'y prends pas comme il faut !
(c'est la fonction recharge dans la pagehaut qui pose problème).

Voici le code des 3 pages:

--------page principale------------------
<html>
<head>
</HEAD>
<FRAMESET ROWS="80%,20%">
<FRAME SRC="pagehaut.htm" NAME="haut">
<FRAME SRC="pagebas.htm" NAME="bas">
</FRAMESET>
<body>
</body>
</HTML>

--------pagehaut------------------
<html>
<head>
<script>

function changetxt()
{
// on récupère la frame du bas
var v_frame = window.parent.frames[1];
v_frame.document.all.divtest.innerHTML="nouveau texte"
}

function recharge()
{
var v_frame = window.parent.frames[1];
v_frame.document.all.divtest.reload;
}

</SCRIPT>

</HEAD>
<body>
page du haut<br>

<input type="button" onclick="changetxt();" value="change">
<input type="button" onclick="recharge();" value="recharge">
</body>
</HTML>

-----pagebas--------
<html>
<head>
</HEAD>
<body>
page du bas
<div id="divtest">texte par défaut qui change</div>
</body>
</HTML>
--------------------

Merci d'avance :-)


par ex:

//---8<---
function recharge()
{
var v_frame = window.parent.frames[1];
v_frame.document.location.reload(true);
}
//---8<---


reload() est une méthode de l'objet location qui n'est accesible qu'à
partir des objet window et document.

reload()
http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/reload.asp

location
http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/obj_location.asp

Amicalement,




--
Jean - JMST
Belgium

Avatar
Fred
Dans son message uJ9$
sympatix nous dit :

Bonjour !

J'ai une page contenant 2 frames, et je voudrais pouvoir recharger
une div avec ses éléments par défauts.
La div se trouve dans la frame du bas, et se pilote depuis la frame
du haut. Je me suis dit qu'en utilisant la méthode "reload", ce
serais du gâteau, mais ça ne fonctionne pas. Rien ne se passe en
cliquant sur le bouton "recharge". C'est clair, je ne m'y prends pas
comme il faut ! (c'est la fonction recharge dans la pagehaut qui pose
problème).
Voici le code des 3 pages:

--------page principale------------------
<html>
<head>
</HEAD>
<FRAMESET ROWS="80%,20%">
<FRAME SRC="pagehaut.htm" NAME="haut">
<FRAME SRC="pagebas.htm" NAME="bas">
</FRAMESET>
<body>
</body>
</HTML>

--------pagehaut------------------
<html>
<head>
<script>

function changetxt()
{
// on récupère la frame du bas
var v_frame = window.parent.frames[1];
v_frame.document.all.divtest.innerHTML="nouveau texte"
}

function recharge()
{
var v_frame = window.parent.frames[1];
v_frame.document.all.divtest.reload;
}

</SCRIPT>

</HEAD>
<body>
page du haut<br>

<input type="button" onclick="changetxt();" value="change">
<input type="button" onclick="recharge();" value="recharge">
</body>
</HTML>

-----pagebas--------
<html>
<head>
</HEAD>
<body>
page du bas
<div id="divtest">texte par défaut qui change</div>
</body>
</HTML>
--------------------

Merci d'avance :-)


Bonjour,
Lis un peu la doc tout de même ;-)
La méthode reload ne s'applique qu'à l'objet location lui même objet de
document et window.
Ca sert à recharger une page donc (ou un frame)
En bref, tu ne peux pas recharger les éléments d'une page individuellement.
(en revanche tu peux sauvegarder le contenu du DIV après chargement pour le
remettre à volonté dans le DIV ensuite)

A tout hasard, mais je pense que tu l'avais trouvé :
http://msdn.microsoft.com/workshop/author/dhtml/reference/dhtml_reference_entry.asp



--
Fred

Avatar
sympatix
Bonjour !

//---8<---
function recharge()
{
var v_frame = window.parent.frames[1];
v_frame.document.location.reload(true);
}
//---8<---


reload() est une méthode de l'objet location qui n'est accesible qu'à
partir des objet window et document.

reload()
http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/reload.asp

location
http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/obj_location.asp


Merci pour ces infos :-)
--
Cordialement
Sympatix
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)
"

Avatar
sympatix
Bonjour,
Salut !

Lis un peu la doc tout de même ;-)
Oui, bon, j'avoue, je n'ai pas (trop) lu la doc !

Elle est trop confuse pour moi, c'est pour ça que je préfère avoir un
exemple concret ici.

La méthode reload ne s'applique qu'à l'objet location lui même objet de
document et window.
Ca sert à recharger une page donc (ou un frame)
En bref, tu ne peux pas recharger les éléments d'une page
individuellement.
Bon, ben, là, effectivement, c'est plus clair...


(en revanche tu peux sauvegarder le contenu du DIV après chargement pour
le remettre à volonté dans le DIV ensuite)


Ben, je ne sais pas quelle est la meilleure méthode, mais j'ai dans un 1er
temps essayé d'utiliser le rechargement complet de la frame.
Je dis "essayé" car, j'ai un nouveau problème: après avoir inserré le code
déstiné à recharger la frame, normalement, le code qui suit juste après
devrait modifier le contenu d'une div (l'apparence d'un lien), et ce n'est
plus le cas.
Je remet en dessous le code (simplifié) des 3 pages (ce qu'il doit faire
n'est pas logique, mais c'est pour expliquer le principe):
1: Au chargement de la page principale, la frame du bas doit se recharger
(donc, avec les valeurs par défaut contenues dans la div)
2: Tout de suite après, cette même div doit être modifée ("nouveau texte"
devrait apparaitre en bas)
Or, ce n'est pas le cas, la div reste avec ses paramètres par défaut.
Pourquoi ?

----page principale----
<html>
<head>
</HEAD>
<FRAMESET ROWS="80%,20%">
<FRAME SRC="pagehaut.htm" NAME="haut">
<FRAME SRC="pagebas.htm" NAME="bas">
</FRAMESET>
<body>
</body>
</HTML>

-----pagehaut-----
<html>
<head>
<script>
function changetxt()
{
var v_frame = window.parent.frames[1];
v_frame.document.location.reload(true);

var v_frame = window.parent.frames[1];
v_frame.document.all.divtest.innerHTML="nouveau texte";
}
</SCRIPT>
<body onload ='changetxt()'>
</HEAD>
<body>
page du haut<br>
</body>
</HTML>

----pagebas----
<html>
<head>
</HEAD>
<body>
page du bas
<div id="divtest">texte par défaut qui change</div>
</body>
</HTML>
--------------
Merci :-)
--
Cordialement
Sympatix
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)

Avatar
Fred
Dans son message
sympatix nous dit :

Bonjour,
Salut !

Lis un peu la doc tout de même ;-)
Oui, bon, j'avoue, je n'ai pas (trop) lu la doc !

Elle est trop confuse pour moi, c'est pour ça que je préfère avoir un
exemple concret ici.

La méthode reload ne s'applique qu'à l'objet location lui même objet
de document et window.
Ca sert à recharger une page donc (ou un frame)
En bref, tu ne peux pas recharger les éléments d'une page
individuellement.
Bon, ben, là, effectivement, c'est plus clair...


(en revanche tu peux sauvegarder le contenu du DIV après chargement
pour le remettre à volonté dans le DIV ensuite)


Ben, je ne sais pas quelle est la meilleure méthode, mais j'ai dans
un 1er temps essayé d'utiliser le rechargement complet de la frame.
Je dis "essayé" car, j'ai un nouveau problème: après avoir inserré le
code déstiné à recharger la frame, normalement, le code qui suit
juste après devrait modifier le contenu d'une div (l'apparence d'un
lien), et ce n'est plus le cas.
Je remet en dessous le code (simplifié) des 3 pages (ce qu'il doit
faire n'est pas logique, mais c'est pour expliquer le principe):
1: Au chargement de la page principale, la frame du bas doit se
recharger (donc, avec les valeurs par défaut contenues dans la div)
2: Tout de suite après, cette même div doit être modifée ("nouveau
texte" devrait apparaitre en bas)
Or, ce n'est pas le cas, la div reste avec ses paramètres par défaut.
Pourquoi ?

----page principale----
<html>
<head>
</HEAD>
<FRAMESET ROWS="80%,20%">
<FRAME SRC="pagehaut.htm" NAME="haut">
<FRAME SRC="pagebas.htm" NAME="bas">
</FRAMESET>
<body>
</body>
</HTML>

-----pagehaut-----
<html>
<head>
<script>
function changetxt()
{
var v_frame = window.parent.frames[1];
v_frame.document.location.reload(true);

var v_frame = window.parent.frames[1];
v_frame.document.all.divtest.innerHTML="nouveau texte";
}
</SCRIPT>
<body onload ='changetxt()'>
</HEAD>
<body>
page du haut<br>
</body>
</HTML>

----pagebas----
<html>
<head>
</HEAD>
<body>
page du bas
<div id="divtest">texte par défaut qui change</div>
</body>
</HTML>
--------------
Merci :-)


Une colle ? Diantre.
Je n'ai pas testé, juste lu ton code.
Si il y a problème, je le verrais bien dans le fait que ton changetxt est
peut-être appelé avant que le contenu de ton frame soit chargé.
Le onload concerne le document principal. Il faudrait regarder plus en
détail mais je ne suis absolument pas persuadé qu'il attend le chargement
des frames pour se déclencher. Place des alert('quelquechose') dans tes
onload pour voir dans quel ordre ils se déclenchent.


--
Fred


Avatar
Jean
Bonjour,
Salut !

Lis un peu la doc tout de même ;-)
Oui, bon, j'avoue, je n'ai pas (trop) lu la doc !

Elle est trop confuse pour moi, c'est pour ça que je préfère avoir un
exemple concret ici.

La méthode reload ne s'applique qu'à l'objet location lui même objet de
document et window.
Ca sert à recharger une page donc (ou un frame)
En bref, tu ne peux pas recharger les éléments d'une page
individuellement.
Bon, ben, là, effectivement, c'est plus clair...


(en revanche tu peux sauvegarder le contenu du DIV après chargement pour
le remettre à volonté dans le DIV ensuite)


Ben, je ne sais pas quelle est la meilleure méthode, mais j'ai dans un 1er
temps essayé d'utiliser le rechargement complet de la frame.
Je dis "essayé" car, j'ai un nouveau problème: après avoir inserré le code
déstiné à recharger la frame, normalement, le code qui suit juste après
devrait modifier le contenu d'une div (l'apparence d'un lien), et ce n'est
plus le cas.
Je remet en dessous le code (simplifié) des 3 pages (ce qu'il doit faire
n'est pas logique, mais c'est pour expliquer le principe):
1: Au chargement de la page principale, la frame du bas doit se recharger
(donc, avec les valeurs par défaut contenues dans la div)
2: Tout de suite après, cette même div doit être modifée ("nouveau texte"
devrait apparaitre en bas)
Or, ce n'est pas le cas, la div reste avec ses paramètres par défaut.
Pourquoi ?

----page principale----
<html>
<head>
</HEAD>
<FRAMESET ROWS="80%,20%">
<FRAME SRC="pagehaut.htm" NAME="haut">
<FRAME SRC="pagebas.htm" NAME="bas">
</FRAMESET>
<body>
</body>
</HTML>

-----pagehaut-----
<html>
<head>
<script>
function changetxt()
{
var v_frame = window.parent.frames[1];
v_frame.document.location.reload(true);

var v_frame = window.parent.frames[1];
v_frame.document.all.divtest.innerHTML="nouveau texte";
}
</SCRIPT>
<body onload ='changetxt()'>
</HEAD>
<body>
page du haut<br>
</body>
</HTML>

----pagebas----
<html>
<head>
</HEAD>
<body>
page du bas
<div id="divtest">texte par défaut qui change</div>
</body>
</HTML>
--------------
Merci :-)


Vous faites un rechargement (reload) à chaque chargement (onload) ...
soit une boucle ...

Cette partie du code ne sera jamais exécutée :

var v_frame = window.parent.frames[1];
v_frame.document.all.divtest.innerHTML="nouveau texte";

... quel est le but exact de votre projet ?


--
Jean - JMST
Belgium


Avatar
Jean
Bonjour,
Salut !

Lis un peu la doc tout de même ;-)
Oui, bon, j'avoue, je n'ai pas (trop) lu la doc !

Elle est trop confuse pour moi, c'est pour ça que je préfère avoir un
exemple concret ici.

La méthode reload ne s'applique qu'à l'objet location lui même objet de
document et window.
Ca sert à recharger une page donc (ou un frame)
En bref, tu ne peux pas recharger les éléments d'une page
individuellement.
Bon, ben, là, effectivement, c'est plus clair...


(en revanche tu peux sauvegarder le contenu du DIV après chargement pour
le remettre à volonté dans le DIV ensuite)


Ben, je ne sais pas quelle est la meilleure méthode, mais j'ai dans un 1er
temps essayé d'utiliser le rechargement complet de la frame.
Je dis "essayé" car, j'ai un nouveau problème: après avoir inserré le code
déstiné à recharger la frame, normalement, le code qui suit juste après
devrait modifier le contenu d'une div (l'apparence d'un lien), et ce n'est
plus le cas.
Je remet en dessous le code (simplifié) des 3 pages (ce qu'il doit faire
n'est pas logique, mais c'est pour expliquer le principe):
1: Au chargement de la page principale, la frame du bas doit se recharger
(donc, avec les valeurs par défaut contenues dans la div)
2: Tout de suite après, cette même div doit être modifée ("nouveau texte"
devrait apparaitre en bas)
Or, ce n'est pas le cas, la div reste avec ses paramètres par défaut.
Pourquoi ?

----page principale----
<html>
<head>
</HEAD>
<FRAMESET ROWS="80%,20%">
<FRAME SRC="pagehaut.htm" NAME="haut">
<FRAME SRC="pagebas.htm" NAME="bas">
</FRAMESET>
<body>
</body>
</HTML>

-----pagehaut-----
<html>
<head>
<script>
function changetxt()
{
var v_frame = window.parent.frames[1];
v_frame.document.location.reload(true);

var v_frame = window.parent.frames[1];
v_frame.document.all.divtest.innerHTML="nouveau texte";
}
</SCRIPT>
<body onload ='changetxt()'>
</HEAD>
<body>
page du haut<br>
</body>
</HTML>

----pagebas----
<html>
<head>
</HEAD>
<body>
page du bas
<div id="divtest">texte par défaut qui change</div>
</body>
</HTML>
--------------
Merci :-)


Vous faites un rechargement (reload) à chaque chargement (onload) ... soit
une boucle ...

Cette partie du code ne sera jamais exécutée :

var v_frame = window.parent.frames[1];
v_frame.document.all.divtest.innerHTML="nouveau texte";

oups désolé ... le onloas est dans la frames[0] ...


... quel est le but exact de votre projet ?


La question reste posée ...

--
Jean - JMST
Belgium



Avatar
Fred
Dans son message
sympatix nous dit :

[...]

----page principale----
<html>
<head>
</HEAD>
<FRAMESET ROWS="80%,20%">
<FRAME SRC="pagehaut.htm" NAME="haut">
<FRAME SRC="pagebas.htm" NAME="bas">
</FRAMESET>
<body>
</body>
</HTML>

-----pagehaut-----
<html>
<head>
<script>
function changetxt()
{


Supprime ceci et cela fonctionnera
8<----
var v_frame = window.parent.frames[1];
v_frame.document.location.reload(true);
8<----


ou alors, ajoute ceci :
8<-----
while(v_frame.document.readyState!="complete") ;
8<-----


var v_frame = window.parent.frames[1];
v_frame.document.all.divtest.innerHTML="nouveau texte";
}
</SCRIPT>


Et remets moi ces balises dns l'ordre !

<body onload ='changetxt()'>
</HEAD>
<body>
page du haut<br>
</body>
</HTML>

----pagebas----
<html>
<head>
</HEAD>
<body>
page du bas
<div id="divtest">texte par défaut qui change</div>
</body>
</HTML>
--------------
Merci :-)


En fait l'erreur n'était pas où je pensais, mais le problème sous-jacent est
bien le même.
Tu relançais un chargement de ta page et tu essayais dans la foulée de
modifier son contenu.
A priori, la deuxième opération ne peut se faire que si le document est
chargé.

--
Fred

Avatar
Fred
Dans son message
sympatix nous dit :

Bonjour,
Salut !

Lis un peu la doc tout de même ;-)
Oui, bon, j'avoue, je n'ai pas (trop) lu la doc !

Elle est trop confuse pour moi, c'est pour ça que je préfère avoir un
exemple concret ici.

La méthode reload ne s'applique qu'à l'objet location lui même objet
de document et window.
Ca sert à recharger une page donc (ou un frame)
En bref, tu ne peux pas recharger les éléments d'une page
individuellement.
Bon, ben, là, effectivement, c'est plus clair...


(en revanche tu peux sauvegarder le contenu du DIV après chargement
pour le remettre à volonté dans le DIV ensuite)


Ben, je ne sais pas quelle est la meilleure méthode, mais j'ai dans
un 1er temps essayé d'utiliser le rechargement complet de la frame.
Je dis "essayé" car, j'ai un nouveau problème: après avoir inserré le
code déstiné à recharger la frame, normalement, le code qui suit
juste après devrait modifier le contenu d'une div (l'apparence d'un
lien), et ce n'est plus le cas.
Je remet en dessous le code (simplifié) des 3 pages (ce qu'il doit
faire n'est pas logique, mais c'est pour expliquer le principe):
1: Au chargement de la page principale, la frame du bas doit se
recharger (donc, avec les valeurs par défaut contenues dans la div)
2: Tout de suite après, cette même div doit être modifée ("nouveau
texte" devrait apparaitre en bas)
Or, ce n'est pas le cas, la div reste avec ses paramètres par défaut.
Pourquoi ?

----page principale----
<html>
<head>
</HEAD>
<FRAMESET ROWS="80%,20%">
<FRAME SRC="pagehaut.htm" NAME="haut">
<FRAME SRC="pagebas.htm" NAME="bas">
</FRAMESET>
<body>
</body>
</HTML>

-----pagehaut-----
<html>
<head>
<script>
function changetxt()
{
var v_frame = window.parent.frames[1];
v_frame.document.location.reload(true);

var v_frame = window.parent.frames[1];
v_frame.document.all.divtest.innerHTML="nouveau texte";
}
</SCRIPT>
<body onload ='changetxt()'>
</HEAD>
<body>
page du haut<br>
</body>
</HTML>

----pagebas----
<html>
<head>
</HEAD>
<body>
page du bas
<div id="divtest">texte par défaut qui change</div>
</body>
</HTML>
--------------
Merci :-)


Stop !
Ne tiens pas compte de mon message précédent. J'ai fait une boulette. Je
corrige et je reposte.

--
Fred


Avatar
Jean
oups désolé ... le onloas est dans la frames[0] ...


sinon l'exécution asynchrone (via setTimeout) du remplissage de texte
fonctionne :

function changetxt()
{
var v_frame = window.parent.frames[1];
v_frame.document.location.reload(true);
setTimeout('ajout_texte()',0)
}

function ajout_texte(){
var v_frame = window.parent.frames[1];
v_frame.document.all.divtest.innerHTML="nouveau texte";

}

Amicalement,

--
Jean - JMST
Belgium

1 2 3 4