Lorsqu'un élément d'un formulaire perd le focus apres changement du
contenu, je poste ledit formulaire et recharge le formulaire (avec le
changement bien sur)
onchange="submit();"
Typiquement, je modifie un input, et je clicque sur un autre (==> form post)
Mais lorsque le post se produit et que le formulaire se recharge, je
perds (et c'est plutôt logic) le focus de l'élément nouvellement cliqué
avant le post.
j'ai tordu le pb dans plein de sens, et je crains une certaine complexité.
Quelqu'un a-t-il deja rencontré ce genre de problématique? Si ca se
trouve, c'est tout bête ...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Francis Spiesser
frisco avait écrit le 10/05/2006 :
Bonjour à tous,
J'ai fait le comportement suivant:
Lorsqu'un élément d'un formulaire perd le focus apres changement du contenu, je poste ledit formulaire et recharge le formulaire (avec le changement bien sur)
onchange="submit();"
Typiquement, je modifie un input, et je clicque sur un autre (==> form post)
Mais lorsque le post se produit et que le formulaire se recharge, je perds (et c'est plutôt logic) le focus de l'élément nouvellement cliqué avant le post.
j'ai tordu le pb dans plein de sens, et je crains une certaine complexité.
Quelqu'un a-t-il deja rencontré ce genre de problématique? Si ca se trouve, c'est tout bête ...
D'avance merci.
Frisco
Une idée comme ça : un champ hidden nommé Focus
un onfocus sur les autres champs qui vont mettre le nom du champ sur lequel on entre dans le champ hidden onfocus="document.forms[0].focus.value=this.name"
Après le submit, on récupére les valeurs du formulaire (dont Focus) et on les affecte à leurs champs respectifs puis, sur le onload de la page : onload="if (document.forms[0].Focus.value!='') eval('document.forms[0].'+document.forms[0].Focus.value+'.focus()')"
Quick, dirty et non testé mais à vue de nez ça devrait pouvoir fonctionner
-- ______ Francis (enlever .NIPUBNISOUMIS) Algèbre gouvernementale : 12 mi-nistres, ça fait 6 nistres
frisco avait écrit le 10/05/2006 :
Bonjour à tous,
J'ai fait le comportement suivant:
Lorsqu'un élément d'un formulaire perd le focus apres changement du contenu,
je poste ledit formulaire et recharge le formulaire (avec le changement bien
sur)
onchange="submit();"
Typiquement, je modifie un input, et je clicque sur un autre (==> form post)
Mais lorsque le post se produit et que le formulaire se recharge, je perds
(et c'est plutôt logic) le focus de l'élément nouvellement cliqué avant le
post.
j'ai tordu le pb dans plein de sens, et je crains une certaine complexité.
Quelqu'un a-t-il deja rencontré ce genre de problématique? Si ca se trouve,
c'est tout bête ...
D'avance merci.
Frisco
Une idée comme ça :
un champ hidden nommé Focus
un onfocus sur les autres champs qui vont mettre le nom du champ sur
lequel on entre dans le champ hidden
onfocus="document.forms[0].focus.value=this.name"
Après le submit, on récupére les valeurs du formulaire (dont Focus) et
on les affecte à leurs champs respectifs puis, sur le onload de la page
:
onload="if (document.forms[0].Focus.value!='')
eval('document.forms[0].'+document.forms[0].Focus.value+'.focus()')"
Quick, dirty et non testé mais à vue de nez ça devrait pouvoir
fonctionner
--
______
Francis (enlever .NIPUBNISOUMIS)
Algèbre gouvernementale : 12 mi-nistres, ça fait 6 nistres
Lorsqu'un élément d'un formulaire perd le focus apres changement du contenu, je poste ledit formulaire et recharge le formulaire (avec le changement bien sur)
onchange="submit();"
Typiquement, je modifie un input, et je clicque sur un autre (==> form post)
Mais lorsque le post se produit et que le formulaire se recharge, je perds (et c'est plutôt logic) le focus de l'élément nouvellement cliqué avant le post.
j'ai tordu le pb dans plein de sens, et je crains une certaine complexité.
Quelqu'un a-t-il deja rencontré ce genre de problématique? Si ca se trouve, c'est tout bête ...
D'avance merci.
Frisco
Une idée comme ça : un champ hidden nommé Focus
un onfocus sur les autres champs qui vont mettre le nom du champ sur lequel on entre dans le champ hidden onfocus="document.forms[0].focus.value=this.name"
Après le submit, on récupére les valeurs du formulaire (dont Focus) et on les affecte à leurs champs respectifs puis, sur le onload de la page : onload="if (document.forms[0].Focus.value!='') eval('document.forms[0].'+document.forms[0].Focus.value+'.focus()')"
Quick, dirty et non testé mais à vue de nez ça devrait pouvoir fonctionner
-- ______ Francis (enlever .NIPUBNISOUMIS) Algèbre gouvernementale : 12 mi-nistres, ça fait 6 nistres
Francis Spiesser
frisco avait écrit le 10/05/2006 :
Une idée comme ça : un champ hidden nommé Focus
un onfocus sur les autres champs qui vont mettre le nom du champ sur lequel on entre dans le champ hidden onfocus="document.forms[0].focus.value=this.name"
Après le submit, on récupére les valeurs du formulaire (dont Focus) et on les affecte à leurs champs respectifs puis, sur le onload de la page : onload="if (document.forms[0].Focus.value!='') eval('document.forms[0].'+document.forms[0].Focus.value+'.focus()')"
Quick, dirty et non testé mais à vue de nez ça devrait pouvoir fonctionner
Ca ne marchait pas mais ce qui est ci-dessous oui (fait pour de l'asp/vbscript mais ça ne devrait pas être difficile à adapter)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Document sans nom</title> </head>
<body> <form method="get"> <input name="champ1" onfocus="document.forms[0].Focus.value=this.name; if (document.forms[0].Change.value=='1') this.form.submit();" onchange="document.forms[0].Change.value='1'" /><br /> <input name="champ2" onfocus="document.forms[0].Focus.value=this.name; if (document.forms[0].Change.value=='1') this.form.submit();" onchange="document.forms[0].Change.value='1'" /><br /> <input type="hidden" name="Focus" /> <input type="hidden" name="Change" /> </form> </body> </html> <script type="text/javascript"> document.forms[0].champ1.value='<% =Request("champ1") %>'; document.forms[0].champ2.value='<% =Request("champ2") %>'; document.forms[0].Focus.value='<% =Request("Focus") %>'; // On ignore volontairement la valeur de Change if (document.forms[0].Focus.value!='') eval('document.forms[0].'+document.forms[0].Focus.value+'.focus()'); </script>
-- ______ Francis (enlever .NIPUBNISOUMIS) Il y a 10 sortes de personnes : celles qui comprennent le binaire et les autres
frisco avait écrit le 10/05/2006 :
Une idée comme ça :
un champ hidden nommé Focus
un onfocus sur les autres champs qui vont mettre le nom du champ sur lequel
on entre dans le champ hidden
onfocus="document.forms[0].focus.value=this.name"
Après le submit, on récupére les valeurs du formulaire (dont Focus) et on les
affecte à leurs champs respectifs puis, sur le onload de la page :
onload="if (document.forms[0].Focus.value!='')
eval('document.forms[0].'+document.forms[0].Focus.value+'.focus()')"
Quick, dirty et non testé mais à vue de nez ça devrait pouvoir fonctionner
Ca ne marchait pas mais ce qui est ci-dessous oui (fait pour de
l'asp/vbscript mais ça ne devrait pas être difficile à adapter)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"
/>
<title>Document sans nom</title>
</head>
<body>
<form method="get">
<input name="champ1" onfocus="document.forms[0].Focus.value=this.name;
if (document.forms[0].Change.value=='1') this.form.submit();"
onchange="document.forms[0].Change.value='1'" /><br />
<input name="champ2" onfocus="document.forms[0].Focus.value=this.name;
if (document.forms[0].Change.value=='1') this.form.submit();"
onchange="document.forms[0].Change.value='1'" /><br />
<input type="hidden" name="Focus" />
<input type="hidden" name="Change" />
</form>
</body>
</html>
<script type="text/javascript">
document.forms[0].champ1.value='<% =Request("champ1") %>';
document.forms[0].champ2.value='<% =Request("champ2") %>';
document.forms[0].Focus.value='<% =Request("Focus") %>';
// On ignore volontairement la valeur de Change
if (document.forms[0].Focus.value!='')
eval('document.forms[0].'+document.forms[0].Focus.value+'.focus()');
</script>
--
______
Francis (enlever .NIPUBNISOUMIS)
Il y a 10 sortes de personnes : celles qui comprennent le binaire et
les autres
un onfocus sur les autres champs qui vont mettre le nom du champ sur lequel on entre dans le champ hidden onfocus="document.forms[0].focus.value=this.name"
Après le submit, on récupére les valeurs du formulaire (dont Focus) et on les affecte à leurs champs respectifs puis, sur le onload de la page : onload="if (document.forms[0].Focus.value!='') eval('document.forms[0].'+document.forms[0].Focus.value+'.focus()')"
Quick, dirty et non testé mais à vue de nez ça devrait pouvoir fonctionner
Ca ne marchait pas mais ce qui est ci-dessous oui (fait pour de l'asp/vbscript mais ça ne devrait pas être difficile à adapter)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Document sans nom</title> </head>
<body> <form method="get"> <input name="champ1" onfocus="document.forms[0].Focus.value=this.name; if (document.forms[0].Change.value=='1') this.form.submit();" onchange="document.forms[0].Change.value='1'" /><br /> <input name="champ2" onfocus="document.forms[0].Focus.value=this.name; if (document.forms[0].Change.value=='1') this.form.submit();" onchange="document.forms[0].Change.value='1'" /><br /> <input type="hidden" name="Focus" /> <input type="hidden" name="Change" /> </form> </body> </html> <script type="text/javascript"> document.forms[0].champ1.value='<% =Request("champ1") %>'; document.forms[0].champ2.value='<% =Request("champ2") %>'; document.forms[0].Focus.value='<% =Request("Focus") %>'; // On ignore volontairement la valeur de Change if (document.forms[0].Focus.value!='') eval('document.forms[0].'+document.forms[0].Focus.value+'.focus()'); </script>
-- ______ Francis (enlever .NIPUBNISOUMIS) Il y a 10 sortes de personnes : celles qui comprennent le binaire et les autres
ASM
frisco avait écrit le 10/05/2006 :
Une idée comme ça : un champ hidden nommé Focus
un onfocus sur les autres champs qui vont mettre le nom du champ sur lequel on entre dans le champ hidden onfocus="document.forms[0].focus.value=this.name"
Après le submit, on récupére les valeurs du formulaire (dont Focus) et on les affecte à leurs champs respectifs puis, sur le onload de la page :
</form> </body> </html> <script type="text/javascript"> document.forms[0].champ1.value='<% =Request("champ1") %>'; document.forms[0].champ2.value='<% =Request("champ2") %>'; document.forms[0].Focus.value='<% =Request("Focus") %>'; // On ignore volontairement la valeur de Change if (document.forms[0].Focus.value!='') eval('document.forms[0].'+document.forms[0].Focus.value+'.focus()'); </script>
-- Stephane Moriaux et son [moins] vieux Mac
frisco avait écrit le 10/05/2006 :
Une idée comme ça :
un champ hidden nommé Focus
un onfocus sur les autres champs qui vont mettre le nom du champ sur
lequel on entre dans le champ hidden
onfocus="document.forms[0].focus.value=this.name"
Après le submit, on récupére les valeurs du formulaire (dont Focus) et
on les affecte à leurs champs respectifs puis, sur le onload de la page :
un onfocus sur les autres champs qui vont mettre le nom du champ sur lequel on entre dans le champ hidden onfocus="document.forms[0].focus.value=this.name"
Après le submit, on récupére les valeurs du formulaire (dont Focus) et on les affecte à leurs champs respectifs puis, sur le onload de la page :
</form> </body> </html> <script type="text/javascript"> document.forms[0].champ1.value='<% =Request("champ1") %>'; document.forms[0].champ2.value='<% =Request("champ2") %>'; document.forms[0].Focus.value='<% =Request("Focus") %>'; // On ignore volontairement la valeur de Change if (document.forms[0].Focus.value!='') eval('document.forms[0].'+document.forms[0].Focus.value+'.focus()'); </script>
-- Stephane Moriaux et son [moins] vieux Mac
Francis Spiesser
frisco avait écrit le 10/05/2006 :
Une idée comme ça : un champ hidden nommé Focus
un onfocus sur les autres champs qui vont mettre le nom du champ sur lequel on entre dans le champ hidden onfocus="document.forms[0].focus.value=this.name"
Après le submit, on récupére les valeurs du formulaire (dont Focus) et on les affecte à leurs champs respectifs puis, sur le onload de la page :
mais ce qui est ci-dessous oui (fait pour de l'asp/vbscript mais ça ne devrait pas être difficile à adapter)
alors :
onload=" var leFocus = '<% =Request("Focus") %>'; if(leFocus.length>0) with(document.forms[0].elements[leFocus]){focus();select();}"
Ca ne marchait pas non à cause d'un problème dans le onload mais parce qu'on récupérait pas le bon focus, j'ai ensuite changé la notation pour une meilleure lisibilité.
Son utilité vient du fait qu'on ne peut pas faire le submit depuis le onchange puisque dans ce cas qu'on ne récupére que le nom du champ où l'on se trouve et pas celui on va. Je passe donc par une variable temporaire traitée dans le onfocus du champ d'arrivée ce qui évite de faire des submit inutiles lorsque le champ précécent n'a pas été modifié
-- ______ Francis (enlever .NIPUBNISOUMIS) "L'intelligence, c'est pas sorcier... Il suffit de penser à une connerie et de dire l'inverse" Coluche
frisco avait écrit le 10/05/2006 :
Une idée comme ça :
un champ hidden nommé Focus
un onfocus sur les autres champs qui vont mettre le nom du champ sur
lequel on entre dans le champ hidden
onfocus="document.forms[0].focus.value=this.name"
Après le submit, on récupére les valeurs du formulaire (dont Focus) et on
les affecte à leurs champs respectifs puis, sur le onload de la page :
mais ce qui est ci-dessous oui (fait pour de
l'asp/vbscript mais ça ne devrait pas être difficile à adapter)
alors :
onload=" var leFocus = '<% =Request("Focus") %>';
if(leFocus.length>0)
with(document.forms[0].elements[leFocus]){focus();select();}"
Ca ne marchait pas non à cause d'un problème dans le onload mais parce
qu'on récupérait pas le bon focus, j'ai ensuite changé la notation pour
une meilleure lisibilité.
Son utilité vient du fait qu'on ne peut pas faire le submit depuis le
onchange puisque dans ce cas qu'on ne récupére que le nom du champ où
l'on se trouve et pas celui on va. Je passe donc par une variable
temporaire traitée dans le onfocus du champ d'arrivée ce qui évite de
faire des submit inutiles lorsque le champ précécent n'a pas été
modifié
--
______
Francis (enlever .NIPUBNISOUMIS)
"L'intelligence, c'est pas sorcier... Il suffit de penser à une
connerie et de dire l'inverse" Coluche
un onfocus sur les autres champs qui vont mettre le nom du champ sur lequel on entre dans le champ hidden onfocus="document.forms[0].focus.value=this.name"
Après le submit, on récupére les valeurs du formulaire (dont Focus) et on les affecte à leurs champs respectifs puis, sur le onload de la page :
mais ce qui est ci-dessous oui (fait pour de l'asp/vbscript mais ça ne devrait pas être difficile à adapter)
alors :
onload=" var leFocus = '<% =Request("Focus") %>'; if(leFocus.length>0) with(document.forms[0].elements[leFocus]){focus();select();}"
Ca ne marchait pas non à cause d'un problème dans le onload mais parce qu'on récupérait pas le bon focus, j'ai ensuite changé la notation pour une meilleure lisibilité.
Son utilité vient du fait qu'on ne peut pas faire le submit depuis le onchange puisque dans ce cas qu'on ne récupére que le nom du champ où l'on se trouve et pas celui on va. Je passe donc par une variable temporaire traitée dans le onfocus du champ d'arrivée ce qui évite de faire des submit inutiles lorsque le champ précécent n'a pas été modifié
-- ______ Francis (enlever .NIPUBNISOUMIS) "L'intelligence, c'est pas sorcier... Il suffit de penser à une connerie et de dire l'inverse" Coluche
frisco
Re-bonjour et merci pour toutes ces infos!
J'avais bien pensé à un truc comme cela (je suis en jsp), mais le problème c'est que la perte de focus n'est pas forcément suivie d'un focus sur autre élement. Et que le 1er evenement déclanché est le (redimensioner la fenetre, la fermer carrérment avec la petite croix "system", clicker sur un lien) Et c'est dans ces cas que le bât blesse ... Moins qu'il faille intercepter tous les evenements de la galaxie susceptibles de provoquer le submit.... tiens, faut voir .... Existe-t-il un équivalent de on load dans l'autre sens qui soit portable (genre onUnload?)
FFJ
frisco avait écrit le 10/05/2006 :
Bonjour à tous,
J'ai fait le comportement suivant:
Lorsqu'un élément d'un formulaire perd le focus apres changement du contenu, je poste ledit formulaire et recharge le formulaire (avec le changement bien sur)
onchange="submit();"
Typiquement, je modifie un input, et je clicque sur un autre (==> form post)
Mais lorsque le post se produit et que le formulaire se recharge, je perds (et c'est plutôt logic) le focus de l'élément nouvellement cliqué avant le post.
j'ai tordu le pb dans plein de sens, et je crains une certaine complexité.
Quelqu'un a-t-il deja rencontré ce genre de problématique? Si ca se trouve, c'est tout bête ...
D'avance merci.
Frisco
Une idée comme ça : un champ hidden nommé Focus
un onfocus sur les autres champs qui vont mettre le nom du champ sur lequel on entre dans le champ hidden onfocus="document.forms[0].focus.value=this.name"
Après le submit, on récupére les valeurs du formulaire (dont Focus) et on les affecte à leurs champs respectifs puis, sur le onload de la page : onload="if (document.forms[0].Focus.value!='') eval('document.forms[0].'+document.forms[0].Focus.value+'.focus()')"
Quick, dirty et non testé mais à vue de nez ça devrait pouvoir fonctionner
Re-bonjour et merci pour toutes ces infos!
J'avais bien pensé à un truc comme cela (je suis en jsp), mais le
problème c'est que la perte de focus n'est pas forcément suivie d'un
focus sur autre élement.
Et que le 1er evenement déclanché est le
(redimensioner la fenetre, la fermer carrérment avec la petite croix
"system", clicker sur un lien)
Et c'est dans ces cas que le bât blesse ...
Moins qu'il faille intercepter tous les evenements de la galaxie
susceptibles de provoquer le submit....
tiens, faut voir ....
Existe-t-il un équivalent de on load dans l'autre sens qui soit portable
(genre onUnload?)
FFJ
frisco avait écrit le 10/05/2006 :
Bonjour à tous,
J'ai fait le comportement suivant:
Lorsqu'un élément d'un formulaire perd le focus apres changement du
contenu, je poste ledit formulaire et recharge le formulaire (avec le
changement bien sur)
onchange="submit();"
Typiquement, je modifie un input, et je clicque sur un autre (==> form
post)
Mais lorsque le post se produit et que le formulaire se recharge, je
perds (et c'est plutôt logic) le focus de l'élément nouvellement
cliqué avant le post.
j'ai tordu le pb dans plein de sens, et je crains une certaine
complexité.
Quelqu'un a-t-il deja rencontré ce genre de problématique? Si ca se
trouve, c'est tout bête ...
D'avance merci.
Frisco
Une idée comme ça :
un champ hidden nommé Focus
un onfocus sur les autres champs qui vont mettre le nom du champ sur
lequel on entre dans le champ hidden
onfocus="document.forms[0].focus.value=this.name"
Après le submit, on récupére les valeurs du formulaire (dont Focus) et
on les affecte à leurs champs respectifs puis, sur le onload de la page :
onload="if (document.forms[0].Focus.value!='')
eval('document.forms[0].'+document.forms[0].Focus.value+'.focus()')"
Quick, dirty et non testé mais à vue de nez ça devrait pouvoir fonctionner
J'avais bien pensé à un truc comme cela (je suis en jsp), mais le problème c'est que la perte de focus n'est pas forcément suivie d'un focus sur autre élement. Et que le 1er evenement déclanché est le (redimensioner la fenetre, la fermer carrérment avec la petite croix "system", clicker sur un lien) Et c'est dans ces cas que le bât blesse ... Moins qu'il faille intercepter tous les evenements de la galaxie susceptibles de provoquer le submit.... tiens, faut voir .... Existe-t-il un équivalent de on load dans l'autre sens qui soit portable (genre onUnload?)
FFJ
frisco avait écrit le 10/05/2006 :
Bonjour à tous,
J'ai fait le comportement suivant:
Lorsqu'un élément d'un formulaire perd le focus apres changement du contenu, je poste ledit formulaire et recharge le formulaire (avec le changement bien sur)
onchange="submit();"
Typiquement, je modifie un input, et je clicque sur un autre (==> form post)
Mais lorsque le post se produit et que le formulaire se recharge, je perds (et c'est plutôt logic) le focus de l'élément nouvellement cliqué avant le post.
j'ai tordu le pb dans plein de sens, et je crains une certaine complexité.
Quelqu'un a-t-il deja rencontré ce genre de problématique? Si ca se trouve, c'est tout bête ...
D'avance merci.
Frisco
Une idée comme ça : un champ hidden nommé Focus
un onfocus sur les autres champs qui vont mettre le nom du champ sur lequel on entre dans le champ hidden onfocus="document.forms[0].focus.value=this.name"
Après le submit, on récupére les valeurs du formulaire (dont Focus) et on les affecte à leurs champs respectifs puis, sur le onload de la page : onload="if (document.forms[0].Focus.value!='') eval('document.forms[0].'+document.forms[0].Focus.value+'.focus()')"
Quick, dirty et non testé mais à vue de nez ça devrait pouvoir fonctionner