Rafraichissement asynchrone d'un champ

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Rafraichissement asynchrone d'un champ

par AB » 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...

par AB » 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:

par joss91 » 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]

par AB » 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 ?

par joss91 » 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]

par Ryle » 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

par joss91 » 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:

par Ryle » 16 janv. 2008, 17:45

Bah euh.... window.parent.getElementById('date').value :?:

par joss91 » 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 ! :(

par Ryle » 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)

par joss91 » 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)

par Ryle » 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);"

par joss91 » 16 janv. 2008, 10:54

Je ne sais pas pourquoi cela ne marche pas... :( j'ai essayé ça :
<INPUT type="button" name="btEnregistre" value="Enregistrer" onClick="javascript: return saisieOK(document.Form1);javascript: window.opener.getElementById('date').value=document.form.ztDateNote.value; form.submit();" class="Bouton">
Pour rappel ma fenetre agenda se trouve dans ../autorecall/agenda/enregistrer_note.php
alors que ma fenetre parente d'envoi sms se trouve ici : ../autorecall/popup.php

voici ce qui se trouve après mon submit, peut etre cela aidera :
</FORM>
  <SCRIPT type="text/javascript">
  <!--   
    Calendar.setup( {
      inputField : "ztDateNote",    // ID of the input field
      ifFormat   : "%d/%m/%Y",  // the date format
      button     : "btCalNote"      // ID of the button
    } );
<?php
    if ($edit!="occ") {
?>

    Calendar.setup( {
      inputField : "ztDateFin",    // ID of the input field
      ifFormat   : "%d/%m/%Y",  // the date format
      button     : "btCalFin"      // ID of the button
    } );
<?php 
    }
?>
    document.Form1.ztLibelle.focus();
  //-->
  </SCRIPT>
Le mieux pour eclaircir le prob serait peut être de telecharger l'agenda phenix (c'est celui que j'utilise) ... ? ca mange pas de pain on va dire : http://www.phenix.gapi.fr/
Merci d'avance pour ton investissement Ryle !

par Ryle » 16 janv. 2008, 01:15

Pour window.opener je pense que la fenetre parente n'est pas l'agenda mais pluto ma fenetre d'envoi de sms !
Effectivement d'après tes explications ça devrait être ça :)
donc cela ne va pas aller...?
Et pourquoi ça n'irait pas je vous prie môssieur ? :)

Il te faut modifier dans ton agenda la sélection d'un jour pour lui dire qu'en plus du truc qu'il fait habituellement, il doit également aller voir dans la fenêtre parente le champ spécifié et le mettre à jour par la même occasion avec la date sélectionée. Y a pas de raison pour que ça n'aille pas ;)

par joss91 » 16 janv. 2008, 00:39

Chronologiquement nous avons : ma premiere fenetre ouvrantevqui est celle d'envoi sms (là ou se trouve mon champ date à remplir). dans le body de cette fenetre se trouve un onload qui contient un window.open(agenda). Ce window.open genere mon agenda (ou je vais effectué des saisies de rdv par des submit, voir les bouts de codes plus haut).

Concernant le ds_sh oui en cliquant sur le champ (celui qu'il faut remplir) on genere un calendrier petit format pour une saisie de date. Or désormais j'aimerais que ce champ se remplisse automatiquement a chaque submit de la date du rdv enregistré dans l'agenda... (si on prend un rdv dans l'agenda le lundi 8 mars 2008 et bien cela renseigne automatiquement ma fenetre d'envoi sms !)

Je pense que j'ai tout dit...? :)

Pour window.opener je pense que la fenetre parente n'est pas l'agenda mais pluto ma fenetre d'envoi de sms ! donc cela ne va pas aller...?

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