Rafraichissement asynchrone d'un champ

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 janv. 2008, 11:14

L'emplacement de tes fichiers sur le serveur n'importe pas puisque l'on travail en javascript, on est donc côté client et tout ce qui compte, c'est ce que l'utilisateur à sous les yeux :)

Ta fenêtre principale est donc ta fenêtre "sms" qui va ouvrir une popup (avec window.open()) qui contiendra donc ton agenda. Tu as donc deux fenêtre d'ouverte, "sms" et "agenda", la fenêtre sms étant la fenêtre parente.

J'ai jeté un coup d'oeil à phenix agenda et les deux choses qui nous interessent lors de l'enregistrement d'une note sont celles ci :

Le champ de saisie de la date, dont l'id est "ztDateNote" :

Code : Tout sélectionner

<INPUT type="text" class="Texte" name="ztDateNote" id="ztDateNote" ... >
Et le bouton enregistrer :

Code : Tout sélectionner

<INPUT type="button" name="btEnregistre" value="Enregistrer" onClick="javascript: return saisieOK(document.Form1);" class="Bouton">
Comme on l'a vu tout à l'heure, tu vas pouvoir récupérer la valeur de la date en passant par document.getElementById('ztDateNote').value. La fonction alert() te permet d'afficher cette valeur et de vérifier que tout fonctionne. Tu peux donc modifier le onClick de ton bouton ainsi :

Code : Tout sélectionner

onClick="javascript: alert(document.getElementById('ztDateNote').value); return saisieOK(document.Form1);"
En principe, si tu rafraichis la page et que tu cliques dessus, tu devrais avoir une boite de dialogue contenant la date saisie.

De la même manière, tu peux accéder aux éléments de ta page "sms" en passant par window.opener, et donc à l'élément dont l'id est "date" en passant par window.opener.getElementById('date').value. Tu dois donc pouvoir mettre à jour ton champ ainsi :

Code : Tout sélectionner

onClick="javascript: window.opener.getElementById('date').value = document.getElementById('ztDateNote').value; return saisieOK(document.Form1);"
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 57 Messages

16 janv. 2008, 12:55

J'ai testé ton code et celà me met ce message d'erreur :

Code : Tout sélectionner

window.opener has no properties [Break on this error] <!DOCTYPE html public "-//w3c//dtd html 4.0 transitional//en"> agenda.php (line 1)

Code : Tout sélectionner

onclick(click clientX=0, clientY=0)
Modifié en dernier par joss91 le 16 janv. 2008, 13:33, modifié 1 fois.
Joss91

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 janv. 2008, 13:11

Bizare... ta popup avec l'agenda est bien ouverte par un window.open() ?
Essaye éventuellement comme ceci (avec le "document" en plus) :

Code : Tout sélectionner

window.opener.document.getElementById('date').value
Sinon, tu peux tester en faisant un "alert(window.opener)" pour voir s'il te retourne [object] (ce qui montre qu'il la trouve bien) ou bien undefined/null (s'il ne la trouve pas)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 57 Messages

16 janv. 2008, 13:40

Nan il ne la trouve pas. window.opener n'est peut etre pas aproprié.

Voici mon code ou je fais mon window.open, dans mon fichier popup.php (voir en bas dans le body):
<?php
include('fonctionsSql.php');
	$login = $_SESSION['user'];
	$infos_cabinet = infos_cabinet($_SESSION['user']);
	$infos_agenda = $infos_cabinet['agenda'];
	//$_SESSION['nb_licences'] = $infos_cabinet['nb_licences'];
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   
   <head>
       <title>AutoRecall</title>
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	   <link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
	   <!--[if lt IE 7]>
		<link rel="stylesheet" media="screen" type="text/css" title="Design" href="design_ie6.css" />
	        <![endif]-->
	   <!--[if gte IE 7]>
		<link rel="stylesheet" media="screen" type="text/css" title="Design" href="design_ie7.css" />
	        <![endif]-->
	   <script type="text/javascript" src="scriptaculous.js"></script>
	  
	</head>

<body class="popup" style="margin:3px; background-color:#DDDDDD;" onLoad="window.resizeTo(480,650);window.moveTo(10,100);refresh_message();<?php if ($infos_agenda == "on"){?>window.open('agenda','agenda' , 'status=yes,scrollbars=yes,resizable=yes,width=910px,height=470px,screenX=500,screenY=150');<?php }?>">

<table class="ds_box" cellpadding="0" cellspacing="0" id="ds_conclass" style="display: none;">
		<tr><td id="ds_calclass"></td></tr>
		</table>

et sinon avec un alert(window.parent) j'obtien ceci comme alerte :

Code : Tout sélectionner

[object Window]
...? Please Help ! :(
Joss91

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 janv. 2008, 17:45

Bah euh.... window.parent.getElementById('date').value :?:
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 57 Messages

16 janv. 2008, 19:17

nan non plus g deja testé... message d'erreur :

Code : Tout sélectionner

window.parent.getElementById is not a function
HELP !! HELP !! :cry:
Joss91

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 janv. 2008, 23:55

Bon on va essayer comme ceci, mais après j'avoue que je sèche :

Code : Tout sélectionner

parent.opener.document.nom_du_formulaire.date.value
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 57 Messages

17 janv. 2008, 01:00

Cela ne donne pas envi de le dire vu qu'après tu seche ! mais malheuresement cela ne marche pas...
Le fait que l'alert sur "parent" donne une réponse [window Object] signifie qu'il faut utiliser un window.parent ?

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
AB
ViPHP | 5818 Messages

18 janv. 2008, 03:25

Alternativement tu peux essayer

parent.document.forms['nom_du_formulaire'].date.value
ou
opener.document.forms['nom_du_formulaire'].date.value

Je me demande si ton pb ne vient pas du fait que tu ouvres un pop up sur un onload.
D'ailleurs avec ie cela doit être considéré comme une publicité intempestive, non ?

Eléphant du PHP | 57 Messages

18 janv. 2008, 16:17

oui je te cache pas que ie n'est pas le meilleur navigateur pour mes fenetres !
Merci pour ton aide AB mais j'ai trouvé la solution hier soir tout seul : il faut mettre en fait

Code : Tout sélectionner

parent.opener.document.getelementbyid('id_destination').value=document.getelementbyid('id_source').value
sinon maintenant je rencontre une seconde etape a franchir dont j'aimerais un peu d'aide aussi :

1/ -> la date est au format jj/mm/aaaa et j'aimerais l'avoir au format : vendredi 17 Janvier 2008.
2/ -> l'heure que je recupère est la suivante 10:15 pour 10h15 alors que je voudrais recupérer en deux valeur c'est à dire 10 dans un id_heure et 15 dans un id_minute.

Merci d'avance !

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
AB
ViPHP | 5818 Messages

18 janv. 2008, 21:34

J'ai pas le temps de te faire une réponse précise mais bon tu as fait l'essentiel. Le reste est un petit traitement javascript.

A mon avis, le plus simple sera de faire une petite fonction javascript pour que cela soit plus lisible. C'est le même principe qu'en PHP

Code : Tout sélectionner

function transfer() { var source = document.getelementbyid('id_source').value; //formatage de source pour renvoyer les valeurs voulues source = ... parent.opener.document.getelementbyid('id_destination').value = source; }
et tu appelles la fonction en faisant par exemple onclick = "transfert()"

Si tu ne trouve pas d'infos pour le formatage de ta chaine sur ce forum, tu trouveras certainement des exemples sur developper.com ou sur selfhtml. Ou peut-être que quelqu'un d'ici te répondra.

Cela dit on a pris l'habitude de ne traiter qu'un sujet par topic pour plus de clarté. Tu devrais mettre celui-ci résolu et réouvrir un autre sujet correspondant à ta seconde question. Tu aurais plus de réponses :wink:

ViPHP
AB
ViPHP | 5818 Messages

20 janv. 2008, 22:27

oui je te cache pas que ie n'est pas le meilleur navigateur pour mes fenetres !
A ta place je ferais un bouton dédié pour l'ouverture de ce pop up. C'est vrai cela ferait un clic de plus à faire, mais au moins cela ne dérouterait pas certains utilisateurs qui ne vont pas se poser la question et fermer simplement le message d'avertissement ie en supposant qu'ils ont réellement affaire à une fenêtre publicitaire...