Page 1 sur 2

submit ->parent.refresh ->close

Posté : 06 sept. 2006, 13:14
par jojolapine
Bonjour à tous,
Dans un espace d'administration d'une bdd, j'ai un bouton éditer qui ouvre une fenêtre popup (avec window.open) dans laquelle je fait des modifs...blablabla.
Puis j'ai <input type="button" /> sur lequel je veux effectuer une suite d'opération:
1-envoyer le formulaire
pour celà j'utilise un getElmentById('...').submit()
et ça fonctionne
2- raffraichir la fenêtre parente: j'ai essayer avec opener, parent, etc...
je n'y arrive pas
3- fermer la popup,
Je pense que celà ne fonctionne pas parceque je bug avec le raffraichissement juste avant...

Donc bon je voulais vous demander comment faire pour le step2
Merci d'avance!

Posté : 06 sept. 2006, 13:45
par zeus
Comme le dit si bien ta signature :
Montrez le code de la page ce qui vous tracasse... !!
Sinon, je pense qu'une fonction Javascript appelée sur l'événement onSubmit de ton formulaire pourrait subvenir à tes besoins.

EDIT ---
... A moins que tu veuilles soumettre les infos contenues dans ton formulaire avant de rafraichir ta page :-k

Posté : 06 sept. 2006, 13:50
par jojolapine
Comme le dit si bien ta signature :
:oops:
Bon alors voilà ce que j'ai comme code:

Code : Tout sélectionner

function sauvegarder(){ getElementById('form1').submit(); opener.refresh(); self.close(); }
et je fait un onClick sur le bouton
A moins que tu veuilles soumettre les infos contenues dans ton formulaire avant de rafraichir ta page
C'est éxactement ça :)
En fait sur la page parente, j'ai une liste d'entrée, dont je modifie le contenu à l'aide de la popup, donc quand je clique sur sauvegarder, je voulais que ça soumette le formulaire (ça ça marche) et que ça réactualise la fenêtre parente pour que les infos soient à jour.
Voili voilou

Posté : 06 sept. 2006, 13:55
par zeus
Tu as donc un soucis de compréhension.

Lorsque tu fait le submit(), je ne suis pas sur que JS attende que l'action soit terminé pour continuer l'exécution. Je dirais même que selon tes dires, il ne doit même pas aller au delà du submit.

Par contre, pourquoi est-ce que tu ne fait pas ce code dans le fichier action de ton formulaire.

Clairement, dans ton formulaire, tu valides et tu te retrouve dans le fichier action.php. Dans ce fichier, tu fait les modifs en base et tu écris le code qui rafraichi le parent et qui ferme la popup.
Au moins, là, tu es sur que les modifs sont prises en compte avant de rafraichir.

Sinon, la syntaxe me parrait correcte :-k

Posté : 06 sept. 2006, 14:15
par jojolapine
Bon ok merci, je vais tester ça tout à l'heure je reviendrai si y a un soucis!

Posté : 06 sept. 2006, 14:21
par Ryle
Ca existe la commande refresh() ?
A ta place, j'utiliserais plutôt un

Code : Tout sélectionner

parent.opener.location.reload(true)
Cela dit, javascript va effectivement enchainer ses commandes sans se poser de question sur le succès ou non de celles-ci tant qu'elles ne lui retournent pas d'erreur js. Du coup, ton close() risque d'intervenir avant que tes données n'aient été envoyées. Je partage donc l'avis de Zeus : envoi les données du formulaire et dans la page de traitement des données, gère l'actualisation et la fermeture.

Posté : 06 sept. 2006, 14:51
par zeus
Il m'aurait juré l'avoir déjà utilisé :-k

sinon, window.opener.location.reload() est valide

Posté : 06 sept. 2006, 15:05
par Ryle
Ca peut marcher.. je me souviens m'être pris la tete à essayer de comprendre pourquoi mes données n'étaient pas envoyées. J'avais collé une alerte avant le close(), du coup le formulaire avait le temps de s'envoyer tandis que je cliquais sur le ok.. et dès que j'enlevais l'alerte, plus rien ne fonctionnait. C'était à s'arracher les cheveux, pis au final j'ai réalisé que c'était une question de timing...

Sinon j'espère bien que le reload() fonctionne vu que je le lui recommande, mon interrogation était pour le refresh() qu'utilise jojo ;)

Posté : 06 sept. 2006, 15:46
par zeus
je parlais également du refresh(). Pour le reste de la réponse, je suis entièrement d'accord avec toi.

Sauf peut être sur le parent :-k

Posté : 06 sept. 2006, 17:08
par Ryle
Au temps pour moi, j'en étais resté à la soumission du formulaire :)

Pour le "parent", c'est une habitude que j'ai prise devant un "opener", mais je ne suis pas certain qu'elle soit vraiment justifiée...

Posté : 07 sept. 2006, 10:34
par jojolapine
Bon alors me revoilà après les tests ... et vu que je reviens => c'est que ça marche pas :cry:
Bon alors je vais mettre toutes les pages içi:
index.php:
...
<head>
<script language="javascript">
function popup(arguments){
  window.open('popup.php?arguments_de_preremplissage_duform',autresargumentsdelapopup)
}
</script>
</head>
...
<img src="..." onClick="popup(arguments)" />
...
ensuite:
popup.php:
...
<form method="post" action="action.php">
...
</form>
...
Et pour finir action.php:
//traitement, enregistrement dans la bdd etc
<html>
<head>
<script language="javascript">
function rafraichissement(){
  opener.reload(true);
  self.close();
}
</script>
</head>
<body onLoad="rafraichissement()">
</body>
</html>
Voilà et donc l'enregistrement est bien fait dans la bdd, mais la popup reste ouverte et la fenêtre parente n'est pas rafraichie

PS: je ne l'ai pas mit içi, mais ma fenêtre popup est générée avec un templeet, mais je ne pense pas que celà ai d'importance ? c'est le source final qui compte non?

Bon merci d'avance

Posté : 08 sept. 2006, 08:33
par Ryle
Dans les autresargumentsdelapopup, tu devrais autoriser l'affichage de la barre d'état pour débugger sur IE ou jeter un coup d'oeil sur la console de FF. Tu verrais ainsi les messages d'erreur apparaitre et cela t'aiderais certainement à les corriger :)

La fonction reload() n'existe pas pour sur l'objet "opener"... regarde bien le code donné plus haut ;)

Posté : 08 sept. 2006, 14:34
par Invité
regarde bien le code donné plus haut Wink
c'est à remplacer par ça:
parent.opener.location.reload(true)
c'est ça?

Posté : 11 sept. 2006, 10:36
par jojolapine
bonjour,
Me revoilà avec mes erreurs !
Bon alors j'ai opter pour mettre le javacript sur la page de traitement du formulaire, dont voici la source à l'affichage:

Code : Tout sélectionner

<html> <head> <script language="javascript"> <!-- function enregistrer(){ window.parent.reload(true); self.close(); } --> </script> <body onLoad="enregistrer()"> </body> </html>
et voilà le message d'erreur dans la console de firefox:

Code : Tout sélectionner

window.parent.reload is not a function
je ne sais plus commetn m'y prendre :cry:
merci d'avance pour les futurs éléments de réponses

Posté : 11 sept. 2006, 11:17
par Ryle
Maiscestpasvraiillefaitexpres ?! :P

La fonction reload() n'existe pas non plus pour sur l'objet "parent"... regarde mieux le code donné plus haut ;)

hum...

The reload() function doesn't exist for the "parent" object, check out the code above
La función de reload() no existe para el objeto "parent", comprueba el código arriba
Die reload() funktion besteht nicht für den "parent" gegenstand, überprüfen aus dem code oben
(ou un truc du genre, ca remonte à loin ;))

Tu as essayé parent, opener, le prochain devrait être le bon :)