Astuce pour paramètre "selected" dans option de tag select

Soyez le premier à donner votre avis sur cette source.

Snippet vu 26 134 fois - Téléchargée 29 fois

Contenu du snippet

Ce code permet de selectionner une valeur dans une liste déroulante d'un champ lorsque l'on modifie un enregistrement de base de données

Source / Exemple :


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
	<title>Astuce Option Selected</title>
</head>

<body>

<!--- Petite astuce pour faciliter la sélection dans une liste déroulante avec la fonction IIf --->
<!--- Methode un peu plus lourde à gérer en passant par une query puis son intégration dans un tableau --->
<!--- mais permet d'éviter les problèmes d'imbrication de cfoutput query--->

<cfset ClientModif="PRECI"> <!--- Affectation de valeur pour démo - Ce client réside en France --->

		<!-- ************ -->
		<!-- * Queries  * -->
		<!-- ************ -->
		
		<cfquery name="QClients" datasource="DevisDES" dbtype="ODBC">
			SELECT      *, ClientID
			FROM         Clients 
			WHERE       (ClientID = '#ClientModif#')
		</cfquery>

		<cfquery name="QCodePays" datasource="DevisDES" dbtype="ODBC">
			SELECT      CodePays 	<!--- CodePays contient les codes pays (ex: FR pour la france) de la table Pays --->
			FROM        Pays 			<!--- Table Pays de DevisDES --->
			ORDER BY  	CodePays
		</cfquery>

		<!-- ************* -->
		<!-- * Tableaux  * -->
		<!-- ************* -->
		
		<cfset LCodePays = arraynew(1)>
		<cfset i=0>
		<cfoutput query="QCodePays">
			<cfset i=i+1>
			<cfset LCodePays[i] ="#CodePays#">
		</cfoutput>

		

		<cfform action="ModifRecordset.cfm" method="POST" enablecab="Yes">

			<cfoutput query="QClients">
		
				<!--- autres champs du masque --->
		
				CodePays:<br>
				<select name="FCodePays">
					<cfloop index="j" from="1" to="#Arraylen(LCodePays)#">
						<option value="#LCodePays[j]#" #IIf("#CodePays#" is "#LCodePays[j]#", de("selected"),de(""))#>#LCodePays[j]#</option>
					</cfloop>
				</select>
		
				<!--- autres champs du masque + bouton--->

			</cfoutput>
		
		</cfform>

</body>
</html>

Conclusion :


L'utilisation d'un tableau n'est pas requise, elle est un peu plus lourde à gérer mais evite les conflits d'imbrication de 'CFOOUTPUT QUERY'

A voir également

Ajouter un commentaire Commentaires
LeChubb Messages postés 3 Date d'inscription mercredi 21 août 2002 Statut Membre Dernière intervention 21 août 2002
21 août 2002 à 15:07
La fonction IIF() est trop lente. Il faut l'eviter a tout prix car elle prend 3 fois plus de temps comparé au <CFIF>

Cedric
BenLaKnet Messages postés 59 Date d'inscription mardi 8 janvier 2002 Statut Membre Dernière intervention 12 décembre 2003
31 janv. 2002 à 08:48
Je ne pense pas que le tableau soit necessaire ... ;O) ...

Je pense que le code IIF peut être simplifié :
IIF (CodePays EQ LCodePays[j],DE("selected"),DE(""))
si je me trompe faites le moi savoir.

Pour infos :
La fonction IIF etant très rapide, pour imposer les valeurs de retour à ce test il est nécessaire d'utiliser la fonction DE :
(doc cf : DE prevents evaluation of a string as an expression when it is passed as an argument to IIf or Evaluate. )
? po compris

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.