submit ->parent.refresh ->close

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 : submit ->parent.refresh ->close

par Ryle » 11 sept. 2006, 14:30

Y a pas de quoi :)

Pour la p'tite explication :

window : c'est la fenêtre sur laquelle tu es
window.opener : c'est la fenêtre qui a ouvert la fenêtre sur laquelle tu es
window.opener.location : c'est l'adresse de la page de la fenêtre qui a ouvert la fenêtre sur laquelle tu es
window.opener.location.reload() : c'est pour rafraichir tout ça ;)
window.opener.location.reload(true) : c'est pour forcer l'actualisation et éviter l'utilisation du cache

:)

par jojolapine » 11 sept. 2006, 12:47

ça marche !
=> [resolu]
encore merci

par Invité » 11 sept. 2006, 11:53

mici :) je test et reviens

par Ryle » 11 sept. 2006, 11:43

viiii :)

La fonction reload() est effectivement une méthode de l'objet "location", qui est lui même un attribut de l'objet fenêtre (window, ou opener si tu fais référence à la fenêtre qui a ouvert celle ci)
Essaye comme ceci (ou avec un parent à la place du window si ca ne fonctionne pas comme ça :)) :

Code : Tout sélectionner

<script language="javascript"> <!-- window.opener.location.reload(true); self.close(); --> </script>

par jojolapine » 11 sept. 2006, 11:25

Bon visiblement je fait des bêtises :oops:
Est-ce que se serait quelquechose comme ça:
opener.location.reload(true) ou alors
parent. " " "
Pas tapper hein :? :?:

par Ryle » 11 sept. 2006, 11:17

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 :)

par jojolapine » 11 sept. 2006, 10:36

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

par Invité » 08 sept. 2006, 14:34

regarde bien le code donné plus haut Wink
c'est à remplacer par ça:
parent.opener.location.reload(true)
c'est ça?

par Ryle » 08 sept. 2006, 08:33

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 ;)

par jojolapine » 07 sept. 2006, 10:34

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

par Ryle » 06 sept. 2006, 17:08

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...

par zeus » 06 sept. 2006, 15:46

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

par Ryle » 06 sept. 2006, 15:05

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 ;)

par zeus » 06 sept. 2006, 14:51

Il m'aurait juré l'avoir déjà utilisé :-k

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

par Ryle » 06 sept. 2006, 14:21

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.