2017-03-02 10 views
1

Dans mon fichier Application.cfc, j'ai défini this.sameFormFieldsAsArray = True.Comment accéder aux valeurs this.sameFormFieldsAsArray

Lorsque je vide le formulaire, je vois les valeurs dans le tableau. Comment puis-je y accéder maintenant si je veux les parcourir et faire d'autres actions?

MISE À JOUR: J'essaie de faire correspondre les valeurs de deux champs de formulaire qui sont passés. Si form.sched contient form.bldgarea, affiche les valeurs des deux. Il est erroné de dire qu'il ne trouve rien à la position 4. Des idées que je fais mal?

<cfloop index="i" from="1" to="#arrayLen(form.bldgarea)#"> 

    <cfloop index="i" from="1" to="#arrayLen(form.sched)#"> 

     <cfif #form.sched[i]# contains #form.bldgarea[i]#> 
     <cfoutput> 
      #form.sched[i]#, #form.bldgarea[i]#   
     </cfoutput> 
     </cfif> 

    </cfloop> 

</cfloop> 
+0

Indice: Voir la [cfloop: boucle sur une liste, un fichier ou un tableau] (https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-tags/tags-jl/cfloop-looping -over-a-list-a-file-ou-un-array.html) documentation. – Leigh

+0

Fera. Merci. – spacerobot

+0

Ces deux champs n'ont pas le même nombre de valeurs/éléments. Quel type de champs de formulaire sont-ils: texte, case à cocher, ...? – Leigh

Répondre

0

Mise à jour:

Si vous obtenez une erreur lors de la soumission, je vous exécutez suspect dans la fonction de sécurité supplémentaire à CF9 + qui Limits the maximum number of POST fields allowed. Une option simple consiste à augmenter la limite dans l'administrateur des FC.

Une autre possibilité consiste à restructurer le formulaire. Déplacez les listes de sélection dans un <form> distinct, elles ne sont donc pas soumises. Lorsque l'utilisateur clique sur le bouton Soumettre dans le formulaire principal, utilisez jQuery pour créer une liste des éléments sélectionnés et les stocker dans un champ masqué. Semblable à l'approche dans this thread. Ensuite, sur la page d'action, parcourez cette liste de valeurs reçues.


Pour résumer la discussion dans les commentaires:

Le but ultime est d'extraire la valeur sched sélectionnée uniquement lorsque la boîte bldgarea associée est cochée.

Je suggérerais une approche légèrement différente. En supposant que vous avez une sorte (numérique ID pour représenter chaque bâtiment, utilisez cela comme la case à cocher "valeur", plutôt que le nom du bâtiment.

<input type="checkbox" name="bldgarea" value="#queryName.buildingID#"> 

Utilisez ensuite la création de valeur ID pour générer des noms uniques pour chacune des listes de sélection:

<select name="sched_#queryName.buildingID#"> 

Lorsque le formulaire est soumis, form.bldgarea ne contiendra que les id des bâtiments sélectionnés. Parcourez ce tableau et saisissez dynamiquement la valeur sched associée, en utilisant la notation de tableau associatif.

<cfloop array="#form.bldgarea#" index="variables.buildingID"> 

    <cfoutput> 
     buildingID = #variables.buildingID# 
     schedID = #FORM["sched_"& variables.buildingID]# 
     <br> 
    </cfoutput> 
    </cfloop> 

NB: cases à cocher ne sont soumis si quelque chose a été vérifié. Assurez-vous de vérifier qu'il existe form.bldgarea avant de l'utiliser.

+0

Merci pour ça. Je joue avec ça maintenant. Devrais-je spécifier variables.buildingID ou devrait-il être quelque chose d'autre comme le champ de formulaire? – spacerobot

+0

Oui, 'variables' est plus approprié ici puisqu'il s'agit d'une variable de page locale, pas quelque chose soumis via POST. (* Techniquement * vous pouvez copier les identifiants dans la portée 'form' si nécessaire, mais il n'y a aucun avantage réel à le faire) – Leigh

+0

Si je change le nom de mon select en sched_ # bldgarea.id # je reçois un message qui dit mauvaise demande quand je soumets. Ne pas poursuivre ce qui se passe. – spacerobot