Fixer le choix d'une balise <select> lors d'un envoi de formulaire

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 833 fois - Téléchargée 23 fois

Contenu du snippet

Ce code permet, après soumission d'un formulaire ASP contenant une ou plusieurs combobox (balise <select>), de retrouver dans la liste le ou les choix sélectionnés.
En effet, si aucun élément de la liste ne comporte l'option "selected", la combobox se positionne automatiquement sur le premier élément de la liste après l'envoi du formulaire, ce qui peut être génant, par exemple pour retrouver à quoi correspondent des données issues d'une table.

Source / Exemple :


<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY>
<%
dim i

if Request.Form("submit") = "Soumettre" then
%>
<form method="post" name="formtest" action="test.asp">
<table border=0 cellpadding=0 cellspacing=0>
<tr>
	<td>
		Vous avez sélectionné : <%=Request.Form("combo1")%> et <%=Request.Form("combo2")%>
	</td>
</tr>
<tr>
	<td>
		<select name="combo1">
		<%
		for i = 0 to 4
		%>
		<option value="<%Response.Write(i)%>" <%if cint(Request.Form("combo1")) = i then Response.Write("selected")%>><%Response.Write(i)%></option>
		<%
		next
		%>
		</select>
	</td>
</tr>
<tr>
	<td>
		<select name="combo2">
		<%
		for i = 5 to 9
		%>
		<option value="<%Response.Write(i)%>" <%if cint(Request.Form("combo2")) = i then Response.Write("selected")%>><%Response.Write(i)%></option>
		<%
		next
		%>
		</select>
	</td>
</tr>
<tr>
	<td>
		<input type="submit" name="submit" value="Soumettre">
	</td>
</tr>
</table>
</form>
<%
else
%>
<form method="post" name="formtest" action="test.asp">
<table border=0 cellpadding=0 cellspacing=0>
<tr>
	<td>
		<select name="combo1">
		<%
		for i = 0 to 4
		%>
		<option value="<%Response.Write(i)%>"><%Response.Write(i)%></option>
		<%
		next
		%>
		</select>
	</td>
</tr>
<tr>
	<td>
		<select name="combo2">
		<%
		for i = 5 to 9
		%>
		<option value="<%Response.Write(i)%>"><%Response.Write(i)%></option>
		<%
		next
		%>
		</select>
	</td>
</tr>
<tr>
	<td>
		<input type="submit" name="submit" value="Soumettre">
	</td>
</tr>
</table>
</form>
<%
end if
%>
</BODY>
</HTML>

Conclusion :


La page "test.asp" comporte deux combos ("combo1" et "combo2") qui gardent les choix effectués, même après avoir cliqué sur le bouton "Soumettre".

Pour mieux se rendre compte de la différence, il faut supprimer les lignes :
- <%if cint(Request.Form("combo1")) = i then Response.Write("selected")%>
et
- <%if cint(Request.Form("combo2")) = i then Response.Write("selected")%>
Dans ce cas là, après soumission, les combos reprennent automatiquement leurs premières valeurs (à savoir 0 pour combo1 et 5 pour combo2).

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1648
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
2
Des tableaux pour afficher des données, là je conteste pas ; mais des tableaux juste pour aligner 2 ou 3 combo, là c'est des balises inutiles. (une liste et 1 lignes de CSS et c'est fini :p).

Pour le "else", en effet excuse je l'avais pas vu :$ ! lol
Néanmoins tu as beaucoup de choses inutiles... Un exemple plus court :
<%
Function WriteOptionValue(comboName,i)
If CInt(Request.Form(comboName)) = i Then
maString = "<option value=""" & i & "" selected=""selected"">" & i & "</option>"
Else
maString = "<option value=""" & i & """>" & i & "</option>"
End If
Return maString
End Function
%>
<form ...>

<li>
<select name="combo1">
<%
For i = 0 to 4
Response.Write(WriteOptionValue("combo1",i))
Next
%>
</select>
</li>
<li>Une deuxième combo ici si tu veux...</li>
<li></li>

</form>
...
Messages postés
4
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
18 février 2008

Nurgle > Au sujet de la mise en page, sache que les tableaux sont certainement ce qu'il y a de mieux... :)
En ce qui concerne le niveau de ma source, le problème est réglè, je pense que tu avais raison ;)
Au premier chargement de la page, c'est le "else" du "if request.form('submit') = 'Soumettre'" qui rentre en compte : les combos s'affichent avec leurs choix par défaut (0 et 5).

jesusonline > merci pr l'info! ;p
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
23
Juste pour info, ce genre de "problème" est nativement traité en asp.net, il suffit d'écrire
Messages postés
1648
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
2
Si je peux suggérer une syntaxe xHTML correcte (noms de balises en minuscule...) et pourquoi pas, une mise en page sans tableaux... :p

Sinon, je trouve que niveau "Initié", c'est très exagéré...

De plus, il y a un problème avec la ligne :
if Request.Form("submit") = "Soumettre" then
en effet, au 1er chargement de la page, ce ne sera pas égal à Soumettre, et donc rien ne sera affiché.

(je ne donne pas de note pour l'instant)

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.