Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

probleme focus

6 réponses
Avatar
J-F Portala
Bonjour,

Dans une application, en fonction d'un resultat, j'affiche une petite
fenetre en javascript avec quelques informations.
J'utilise un window.open et eventuellement un timeout pour qu'elle se
referme toute seule.

Cela fonctionne bien , mais dans le meme temps que j'affiche la fenetre, je
recharge une page pour afficher un formulaire.
Tout se passe bien, le message a le focus, et s'affiche sur le formulaire
durant le temps imparti.

Probleme, je souhaiterais que le focus sur ce formulaire se place sur un
champ particulier.
Si je fais un setfocus sur le onload, cette fenetre vient par-dessus le
message, et celui ci ne sert plus a rien.
Il s'affiche en arriere plan

Comment est ce que je peux contourner cet obstacle.

Je travaille avec javascsript et php.

Merci de vos suggestions.

Jeff

6 réponses

Avatar
YD
Dans une application, en fonction d'un resultat, j'affiche une petite
fenetre en javascript avec quelques informations. [...]
Cela fonctionne bien , mais dans le meme temps que j'affiche la fenetre, je
recharge une page pour afficher un formulaire.
Tout se passe bien, le message a le focus, et s'affiche sur le formulaire
durant le temps imparti.

Probleme, je souhaiterais que le focus sur ce formulaire se place sur un
champ particulier.
Si je fais un setfocus sur le onload, cette fenetre vient par-dessus le
message, et celui ci ne sert plus a rien.
Il s'affiche en arriere plan

Comment est ce que je peux contourner cet obstacle.


En prenant le problème dans l'autre sens : le focus n'est nécessaire que
quand la fenêtre popup ne l'a plus ! Donc placer le focus sur le champ
au déclenchement de l'événement onunload et/ou onblur de la fenêtre
popup. Un code dans un <script> de la popup du genre :

onunload=function(){opener.forms[ref][elem].focus();}

--
Y.D.

Avatar
J-F Portala
"YD" a écrit dans le message de news:
4406b3d1$0$21270$
Dans une application, en fonction d'un resultat, j'affiche une petite
fenetre en javascript avec quelques informations. [...] Cela fonctionne
bien , mais dans le meme temps que j'affiche la fenetre, je recharge une
page pour afficher un formulaire.
Tout se passe bien, le message a le focus, et s'affiche sur le formulaire
durant le temps imparti.

Probleme, je souhaiterais que le focus sur ce formulaire se place sur un
champ particulier.
Si je fais un setfocus sur le onload, cette fenetre vient par-dessus le
message, et celui ci ne sert plus a rien.
Il s'affiche en arriere plan

Comment est ce que je peux contourner cet obstacle.


En prenant le problème dans l'autre sens : le focus n'est nécessaire que
quand la fenêtre popup ne l'a plus ! Donc placer le focus sur le champ
au déclenchement de l'événement onunload et/ou onblur de la fenêtre
popup. Un code dans un <script> de la popup du genre :

onunload=function(){opener.forms[ref][elem].focus();}

--
Y.D.


Merci de votre reponse.
Je ne sais pas si j'ai bien compris.
Il faudrait mettre dans la fenetre de message la fonction onunload et
pointer le focus sur un champ d'une autre fenetre.
La fenetre de message est une fenetre genere en php de facon générique. Je
souhaiterais que cette fenetre de message garde son
caractere generique.
De plus je ne vois pas vraiment comment donner le focus à un champ d'une
autre fenetre à partir de la fenetre message..

L'ideal serait de tester si la fenetre message dont le nom est message est
ouverte.
Si c'est le cas, appliquer un tempo puis donner le focus aux champs, ou
mieux, attendre que la
fenêtre soit fermée (moins simple).

Appliquer une tempo systèmatiquement est un peu lourd, mais cela fonctionne.

Je n'arrive pas à tester si la fenetre message est ouverte.
Comment creer un objet window a partir du nom de la fenetre.
Merci de vos conseils
Jeff


Avatar
J-F Portala
Avec la fonction onBlur, cela fonctionne.
J'ai onLoad qui ouvre la fenetre, et lance le timer, et sur
onblur()=self.focus() ;
La fenetre message reste en premier plan tout le temps de la tempo et
ensuite l'autre fenetre retrouve les focus

Merci de votre aide

Jeff
Avatar
YD
Avec la fonction onBlur, cela fonctionne.
J'ai onLoad qui ouvre la fenetre, et lance le timer, et sur
onblur()=self.focus() ;
La fenetre message reste en premier plan tout le temps de la tempo et
ensuite l'autre fenetre retrouve les focus


Avec les navigateurs Gecko, il existe l'option dependent=yes à ajouter
dans les paramètres d'ouverture de la popup qui permet de conserver
la popup au premier plan et de ne pas afficher d'icône supplémentaire
dans la barre des tâches. Mixé avec le onblur, cela permettrait
d'étendre le nombre de navigateurs où la popup restera au premier
plan.

HTH

--
Y.D.

Avatar
ASM
Merci de votre reponse.
Je ne sais pas si j'ai bien compris.


le popup (mêm s'il a une page générique php)
a forcément été lancé par le javascript.

en effet, une possibilité de surveilance peut être mise en place

la difficulté est que seul le popup peut assurer cette surveillance
(une nouvelle page ayant été chargée dans la fenêtre mère
cette dernière ne connait plus le popup)

Donc on met dans la page du formulaire de la fenêtre mère

<script type="text/javascript">
truc = false;
onload = function() { truc=true; }
</script>

et dans la page du popup

<script type="text/javascript">
function espion() {
if(opener && opener.truc) leChamp();
else setTimeout('espion()',200);
}
function lechamp() {
if(opener.document.forms['monForm'].elements['monChamp']) {
opener.document.forms['monForm'].elements['monChamp'].focus();
self.close();
}
else {
opener.location='formuaire.php';
alert('erreur, veuillez fermer cete fenetre 'message'.');
}
}
onload = espion;
</script>


Je n'arrive pas à tester si la fenetre message est ouverte.


c'est le popup qui doit être équipé pour le faire
(il indique à la fenêtre mère qu'il est là,
exemple : en modifiant une variable de la fenêtre mère)

Comment creer un objet window a partir du nom de la fenetre.


// nom de fenêtre popup = 'machin'
machin = window.open('page.php');
machin.location = 'autrePage.php'
machin.close();

http://perso.wanadoo.fr/stephane.moriaux/truc/causer_au_popup
http://perso.wanadoo.fr/stephane.moriaux/truc/communik_fille_mere/
http://perso.wanadoo.fr/stephane.moriaux/truc/popup_oui_non/
http://perso.wanadoo.fr/stephane.moriaux/truc/popup_suivi/

--
Stephane Moriaux et son [moins] vieux Mac

Avatar
ASM
Avec la fonction onBlur, cela fonctionne.
J'ai onLoad qui ouvre la fenetre, et lance le timer, et sur
onblur()=self.focus() ;
La fenetre message reste en premier plan tout le temps de la tempo et
ensuite l'autre fenetre retrouve les focus


c'est mieux de se passer de tempo
et que ce soient les actions (onoad dans fenetre mere par exemple)
qui actionnent :-)

avec un minimum de triturage, c'est touj possible.
(dans la mesure où de tte façon on s'appuie sur le JS)

--
Stephane Moriaux et son [moins] vieux Mac