Comment forcer le focus sur un contrôle d'une page client depuis le serveur

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 537 fois - Téléchargée 27 fois

Contenu du snippet

Contrairement à ce que je pensais, on peut forcer le focus sur un contrôle d'une page client depuis le serveur, à l'aide de cette astuce.
SI je veux par exemple que des contrôles(textbox ou DropdownList), qui provoquent un aller-retour serveur, gardent le focus.
Pour que ce focus se déplace sur le contrôle suivant, c'est à peine plus compliqué.
Il doit y avoir d'autres application, mais d'aucuns diront que je découvre la lune ...

Source / Exemple :


'Il faut d'abord une <form> contenant des contrôles serveur p. ex.:

<form id="Form1" method="post"  runat="server">

<asp:TextBox id="TextBox1" runat="server" AutoPostBack="true"></asp:TextBox><br>
<asp:TextBox id="TextBox2" runat="server" AutoPostBack="true"></asp:TextBox><br>
<asp:DropDownList id="DropDownList1" runat="server" Width="122px"  AutoPostBack="true"/>

</form>
 'on remarque les"AutoPostBack="true""

'Ensuite la sub gérant les évènements:

    Private Sub Determin_Sender(ByVal sender As System.Object, ByVal e As System.EventArgs)
 Handles DropDownList1.SelectedIndexChanged, TextBox1.TextChanged, TextBox2.TextChanged
        'du code serveur éventuellement-----

        '------------------------------------
        'et cette ligne donne l'ID du sender:

        envoyeur = Request.Form("__EVENTTARGET").ToString

	'on peut rajouter ici les aménagements souhaités:
	'par exemple :
	if envoyeur="TextBox1" then
		envoyeur="textbox2" 'pour envoyer le focus automatiquement sur la 2e boîte
	end if 

    End Sub

'On aura pris soin de déclarer "envoyeur" comme : Public envoyeur as String 

'enfin on insère le script-client avant la balise </head> :
	function forcefocus()
	{
	document.Form1.<%=envoyeur%>.focus();
	}
'il reste à déclencher l'exécution avec :

	<body MS_POSITIONING="GridLayout" onload="javascript:forcefocus()">

Conclusion :


Il est possible de faire beaucoup plus compliqué pour déterminer qui aura le focus, car on dispose de la sub-serveur "Determin_Sender" pour le faire. On peut faire des tests, et décider l'envoi du focus selon la valeur choisie par exemple.
Si ça peut servir...
Bye

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.