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

Recup focus courant dans form

5 réponses
Avatar
frisco
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

5 réponses

Avatar
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

Avatar
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

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


Ca ne marchait pas


et ceci :

onload=" var leFocus = '';
if(document.forms && document.forms[0]['Focus']) {
leFocus = document.forms[0].Focus.value;
if(leFocus && leFocus != '')
with(document.forms[0].elements[leFocus])
{
focus();
select();
}
}

??

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();}"


<!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" />


et pourquoi ce n'est pas fait direct par l'asp ?

<input type="hidden" name="Focus" value="<% =Request("Focus") %>" />

<input type="hidden" name="Change" />


pas compris son utilité

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


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


Ca ne marchait pas


et ceci :

onload=" var leFocus = '';
if(document.forms && document.forms[0]['Focus']) {
leFocus = document.forms[0].Focus.value;
if(leFocus && leFocus != '')
with(document.forms[0].elements[leFocus])
{
focus();
select();
}
}

??

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


<input type="hidden" name="Focus" />


et pourquoi ce n'est pas fait direct par l'asp ?

<input type="hidden" name="Focus" value="<% =Request("Focus") %>" />



Oui, on peut. Comme je l'ai dit, c'est du Q&D

<input type="hidden" name="Change" />


pas compris son utilité


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



Avatar
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