Liste déroulante

Résolu
Signaler
Messages postés
5
Date d'inscription
mercredi 29 juin 2005
Statut
Membre
Dernière intervention
25 juillet 2005
-
Messages postés
5
Date d'inscription
mercredi 29 juin 2005
Statut
Membre
Dernière intervention
25 juillet 2005
-
Bonjour,

Je cherche à faire un truc qui me semble tout con, mais malgré mes recherches, je n'y arrive pas.

Alors voilà, j'ai une liste déroulante avec 2 dates (2003 et 2004). Je
voudrais récupérer la valeur selectionnée (sans cliquer sur un bouton)
pour ensuite la passer en paramètre d'une url.



<cfform name="choix1" METHOD="post">



<cfselect
name="an" onchange="an = this.options[this.selectedIndex].text">


<OPTION value="2004"
SELECTED>2004</option>


<OPTION value="2003">2003</option>

</cfselect>

</cfform>

<li>[Page1.cfm?annee=#an# Lien1 :]</li>

<li>[Page2.cfm?annee=#an# Lien2 :]</li>



Bien sûr le code est faux, mais que dois-je faire pour que ça marche ?

Merci d'avance.

13 réponses

Messages postés
15
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
31 mars 2006

J'ai apporté kelke correctifs o code.Réessaie voir.
<cfif isdefined("form.an")>
<cfset an = form.an>
<cfelse>
<cfset an = 2004> <!--- Puisque ton selected est pointé sur 2004 --->
</cfif>
<cfform name="choix1" METHOD="post">

<cfselect name="an" Passthrough ="onChange=choix1.submit();">
<OPTION value="2004" <cfif an eq 2004>SELECTED</cfif>>2004</option>
<OPTION value="2003" <cfif an eq 2003>SELECTED</cfif>>2003</option>
</cfselect>
</cfform>
<li>[Page1.cfm?annee=<cfoutput>#an#</cfoutput> Lien1 :]</li>
<li>[Page2.cfm?annee=<cfoutput>#an#</cfoutput> Lien2 :]</li>
Messages postés
203
Date d'inscription
lundi 23 décembre 2002
Statut
Membre
Dernière intervention
11 mai 2006

Salut,

Si tu veux que la variable passes lorsque tu cliques sur le lien il faut appeler le javascript depuis le lien. EN AUCUN CAS TU NE PEUX CHANGER LA VALEUR D'UNE VARIABLE COLDFUSION DEPUIS UN JAVASCRIPT SANS RECHARGER LA PAGE. - desole il fallait que ca sorte ;o)

Donc ce que tu cherches ressemblerait me semble t il a un truc du style:

<js script>
function submitthis(annee,page){
document.choix1.action='page'+page+'.cfm?annee='+annee;
document.choix1.submit();
}
</jscript>
<cfform name="choix1" METHOD="post">
<cfselect name="an">
<OPTION value="2004">2004</option>
<OPTION value="2003">2003</option>
</cfselect>
<li>[javascript:submitthis(document.choix1.an.value,'1'); Lien1 :]</li>
<li>[javascript:submitthis(document.choix1.an.value,'2'); Lien2 :]</li>
</cfform>

Laurent
Messages postés
15
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
31 mars 2006

ESSAIE LE CODE SUIVANT VOIR

<cfif isdefined("form.an")>
<cfset an = form.an>
<cfelse>
<cfset an = 2004> <!--- Puisque ton selected est pointé sur 2004 --->
</cfif>
<cfform name="choix1" METHOD="post">

<cfselect name="an" Passthrough ="onChange=choix1.submit();">
<OPTION value="2004" SELECTED>2004</option>
<OPTION value="2003">2003</option>
</cfselect>
</cfform>
<li>[Page1.cfm?annee=<cfoutput>#an#</cfoutput>= Lien1 :]</li>
<li>[Page2.cfm?annee==<cfoutput>#an#</cfoutput>= Lien2 :]</li>
Messages postés
2378
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
18
Ok..

Avec la réponse de CFQuery, je comprends mieux. Je pensais que tu
voulais changer l'URL sans faire un Submit. Si c'est le cas, il te
faura utiliser Javascript et non Cold fuison ki ne peut rien
faire pour toi..

De mémoire la valeur doit se retrouver en Javascript ainsi.

document.monForm.an.elements[document.monForm.an.selectedIndex].value ou kelke chose dans le genre..

S.
Messages postés
5
Date d'inscription
mercredi 29 juin 2005
Statut
Membre
Dernière intervention
25 juillet 2005

Merci beaucoup pour vos réponses.

Avec ton code, cfquery, la variable 'an' reste égale à 2003. Elle ne prend jamais la valeur 2004. Je ne sais pas trop pourquoi.

Je pense également, comme tu le dis syndrael, qu'il faut passer par
javascript. J'ai essayé un peu mais je n'arrive pas à renvoyer une
variable de javascript vers coldfusion. Si vous avez une solution, elle
serait la bienvenue car je commence un peu à désespérer...

Merci encore de vos réponses.
Messages postés
203
Date d'inscription
lundi 23 décembre 2002
Statut
Membre
Dernière intervention
11 mai 2006

Salut PO55,

Ce que tu veux faire n'est pas possible puisque le select est au niveau client et que donc CF ne peut pas voir ces valeurs dans la mesure ou la page est deja processee.

Ce que tu peux faire c'est un truc du style (pas teste):

<js script>
function submitthis(page){
document.choix1.action=page;
document.choix1.submit();
}
</jscript>
<cfform name="choix1" METHOD="post">

<cfselect name="an" onchange="javascript:submitthis(document.choix1.an.value)">
<OPTION value="" SELECTED>Selectionez une annee</option>
<OPTION value="Page1.cfm?annee=2004">2004</option>
<OPTION value="Page2.cfm?annee=2003">2003</option>
</cfselect>
</cfform>

Laurent
Messages postés
5
Date d'inscription
mercredi 29 juin 2005
Statut
Membre
Dernière intervention
25 juillet 2005

Merci pour ta réponse, et en effet tu as tout à fait raison, je suis obligé de passer par du javascript.

Par contre, je ne souhaite pas faire une redirection lors du select, mais seulement lors du clic sur le lien.

C'est pour cela que j'aimerai faire un truc du genre :



<js script>

function ma_fonction(annee){

an=annee;

}

</jscript>



<cfform name="choix1" METHOD="post">




<cfselect name="an"
javascript:onchange="ma_fonction(this.options[this.selectedIndex].text)">


<OPTION value="2004" SELECTED>2004</option>


<OPTION value="2003">2003</option>

</cfselect>

</cfform>



<li>[Page1.cfm?annee=#an# Lien1 :]</li>

<li>[Page2.cfm?annee=#an# Lien2 :]</li>



Avec ma_fonction qui valorise une variable coldfusion ('an') en
fonction du value du select. Le hic, c'est que je n'arrive pas à
renvoyer une variable coldfusion avec javascript.

Je ne sais pas si j'ai été très clair...

Quoiqu'il en soit, merci encore de votre aide.
Messages postés
5
Date d'inscription
mercredi 29 juin 2005
Statut
Membre
Dernière intervention
25 juillet 2005

Merci mille fois, c'est exactement ça !

Les deux versions marchent nickel.

Merci encore.
Messages postés
164
Date d'inscription
dimanche 1 octobre 2000
Statut
Membre
Dernière intervention
23 mars 2007
1
Bon.. je vais me permettre une petite remarque (depuis le temps que je suis pas venu, il faut au moins ça...)



ce que dit Laurent(lfontaine) est tout à fait justifié, et je te
déconseillerais d'utiliser le script de cfquery.. d'ailleurs si tu
creuse un peu les deux scripts proposés et validés ne fonctionnent pas
vraiment de la même façon, et tu te rendras compte de la différence
lorsque tu installera ton script ailleurs que sur un serveur local.

petite démonstration textuelle...

<hr size="2" width="100%">

Dans le script de lfontaine, quelque soit le temps de réponse du serveur :

1) tu sélectionne une valeur dans la liste

2) tu clique sur ton lien, qui par javascript(donc coté client, donc
totalement transparent... pas d'appel au serveur ni besoin de recharger
la page) va prendre la valeur sélectionnée dans la liste et passe la
valeur 'an' en paramètre

3) tu attéri sur ta page choisie par le lien avec la bonne année

<hr size="2" width="100%">

Dans le script de cfquery il se passe la chose suivante, si le temps de réponse du serveur est rapide :


1) tu sélectionne une valeur dans la liste, lançant automatiquement l'ordre de recharger la page

2) le temps de réponse étant rés rapide, la page se recharge en trés
peu de temps, de façon quasi invisible
pour l'utilisateur(je dis bien quasi... car en utilisant une mise en
page un peu lourde et complexe, ça fera une espèce de flash...), en
passant en paramètre 'an' la valeur choisie dans
la liste. Cold fusion reprend la valeur et la met dans le lien


3) tu cliques sur ton lien qui passe ta valeur an choisie précédemment en paramètre


4) tu attéri sur ta page choisie par le lien avec la bonne année.



imagine la même chose avec un serveur ayant un temps de réponse suffisamment long


1) tu sélectionne une valeur dans la liste, lançant automatiquement l'ordre de recharger la page

2) le serveur étant trés lent, ta page ne se recharge pas tout de
suite.( La page précédente reste affichée tant que le serveur n'a pas
envoyé suffisamment d'information sur la page en cours de chargement).
Ceci te laissant suffisamment de temps pour cliquer sur ton lien avant
que la page ne soit rechargée

3) tu cliques donc sur ton lien qui possède la valeur an définie
originellement au chargement de la page (bref celle qui apparait avant
l'étape 1)

4) tu atterri sur ta page choisie, mais avec une mauvaise année...



<hr size="2" width="100%">voilà voilà... et si tu veux vérifier par toi
même, fais toi une petite boucle un peu longue (genre cfloop bouclant
10000 fois) au début de tes pages coldfusion ou dépose ton script sur
un serveur que tu atteins par un réseau super lent...
Messages postés
164
Date d'inscription
dimanche 1 octobre 2000
Statut
Membre
Dernière intervention
23 mars 2007
1
Autre petite remarque : tu précises bien que tu ne veux pas de
redirection lors de la sélection dans la liste.. c'est presque ce que
fait le script de cfquery, qui fait recharger la même page pour changer
le lien... (cfquery va croire que je lui en veux...)



Pour cfquery : ton <cfif isdefined("form.an")... <cfset
an=form.an>...</cfif> sont inutiles pour plusieurs
raisons :

si tu indique a CF d'utiliser #an# il regardera si les variables
#form.an#, #url.an#, #an# (enfin.. il y a d'autres préfixes, pour ça
regarder la doc cf pour avoir la liste et l'ordre de traitement auto)
existent et si oui utilisera automatiquement le premier trouvé, défini
et contenant une valeur, en tant que #an#.



il existe aussi le tag <cfparam> que tu peux utiliser ainsi

<cfparam name="an" default="2004"> qui signifie que si la var
#an# n'est pas définie elle prendra par défaut la valeur 2004

ce qui signiefie donc, en combinaison avec la capacité de cf cité
précédemment que s'il y a un #form.an# défini, il le mettra
automatiquement dans la var #an#, sinon il utilisera 2004.



J'en profite également pour proposer une autre solution, qui est
presque équivalent a celle de laurent, sauf que la variable annee est
passée en tant que variable de formulaire (ce qui ne change rien, si tu
ne t'amuse pas à distinguer les variables d'url, de formulaire,
générales et autres)



<js script>

function submitthis(page){

document.choix1.action=page

document.choix1.submit();

}

</jscript>



<cfform name="choix1" METHOD="post">

<cfselect name="annee">

<OPTION
value="2004">2004</option>


<OPTION value="2003">2003</option>

</cfselect>

<li>[# onClick="submitthis('page1.cfm')">Lien1 :]</li>

<li>[# onClick="submitthis('page2.cfm')">Lien2 :]</li>

</cfform>
Messages postés
15
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
31 mars 2006

Je suis tout à fait d'accord avec les remarques de Bastoun.
Je veux tout de même préciser( si jè bien piger son code) que sa variables annee serait recuperée sur les page1 et page2 par la methode form. et non url.
Messages postés
164
Date d'inscription
dimanche 1 octobre 2000
Statut
Membre
Dernière intervention
23 mars 2007
1
tout a fait... mais si tu ne précise pas la méthode (ni form, ni url)
pour récupérer la variable annee, ça fonctionnera... bon après, faut
voir si tu veux différencier form/url ou pas...
Messages postés
5
Date d'inscription
mercredi 29 juin 2005
Statut
Membre
Dernière intervention
25 juillet 2005

Merci beaucoup pour toutes ces précisions.

Comme le dit cfquery, en effet, je cherche à récupérer ma variable 'annee' sur les pages1 et 2.

Pour éclaircir un peu mon problème j'ai fait une capture d'écran :



Le lien1 renvoie sur une page où j'ai besoin de ma variable 'annee' (utilisée dans des requètes SQL).

Pour les autres ce sont des fichiers à télécharger (la valeur de 'annee' détermine le répertoire où se trouve les fichiers).

Pour le lien2, en plus de l'année, je dois tenir compte de la langue
('annee' détermine le répertoire et la langue détermine le nom du
fichier).

C'est pour ça que la méthode de cfquery me paraissait pas mal. En effet
en local ça marche très bien, mais j'ai pas encore testé sur le
serveur...

En fin de compte, le problème des liens me semble accessoire, je désire
juste avoir une variable qui prenne comme valeur de le choix effectué
dans le menu déroulant.

Voilà, je ne sais pas si j'ai été très clair, mais merci encore pour votre aide.