La boucle for est utilisée pour effectuer un nombre donné d'itérations de la boucle. Le nombre d'itérations est déterminé par la valeur de l'attribut loop-expression, comme suit :
<loop loop-type="for" loop-expression="numPeople"> <question-page id="PersonDetailsPage" entity="Person"> ... </question-page> </loop>
En d'autres termes, le nombre de fois où la page PersonDetailsPage s'affiche est déterminé par la valeur de la réponse à la question de contrôle numPeople. Même si le fonctionnement peut être correct lors du premier passage dans la boucle, il est important de prendre en compte la réaction lors du deuxième ou troisième passage dans la boucle, lorsque des réponses sont affichées ou modifiées. Par exemple, au cours des précédentes itérations, une ou plusieurs personnes peuvent avoir été capturées. Il peut donc s'avérer utile d'exécuter une boucle sur elles plutôt que de continuer à ajouter de nouvelles personnes.
En effet, la boucle for devient une boucle for-each une fois que certaines données ont été saisies dans l'entité qui enregistre ces entrées. Il est ainsi nécessaire de donner à la boucle for les mêmes informations que celles données à une boucle for-each : une entité à itérer et un critère facultatif. Une fois l'entité spécifiée dans la boucle, il n'est pas nécessaire de l'indiquer pour les pages dans la boucle, tant qu'elles sont uniques. La boucle peut ressembler à l'exemple suivant :
<loop loop-type="for" loop-expression="numPeople" entity="Person" criteria="isPrimary==false"> <question-page id="PersonDetailsPage"> ... </question-page> </loop>
Lors de l'utilisation de boucles, il est recommandé d'utiliser une expression de boucle simple, se rapportant uniquement à l'ID d'une question posée avant la boucle, pour déterminer le nombre d'enregistrements à créer. Cette question doit être une question de contrôle de type Entier.
Cette question de contrôle ne sera pas mise à jour automatiquement et ne sera donc pas synchronisée avec le nombre réel d'entités si les entités sont ajoutées ou supprimées par le biais d'une page de synthèse. Ainsi, sa valeur ne doit pas être utilisée pour autre chose que l'expression de la boucle.
Une fois la boucle démarrée, il sera impossible de modifier la valeur de cette question de contrôle, elle sera en lecture seule par défaut, à moins que l'attribut "hide-for-control-question" n'ait été défini sur true dans l'élément script-ieg ; dans ce cas, le libellé et la valeur de la question de contrôle seront masqués. Le concepteur de script doit alors s'assurer que la question de contrôle n'est pas la seule question de la page où elle est définie, car cela entraînerait l'affichage d'une page vide.
Dans la pratique, les boucles for ont une application restreinte et, par conséquent, les boucles while sont généralement recommandées pour capturer des informations, leur utilisation semblant plus intuitive pour l'utilisateur.