Из того, что я видел в вашем примере, проблема в том, что к идентификаторам элементов формы добавляется увеличенное число, а к именам нет.
Это означает, что если у вас есть 2 ингредиента, вы получите что-то вроде:
form.quantity = "1,3"
form.quantityType = "tablespoon,cup"
form.ingredient = "oil, flour"
form.notes = "canola,sifted"
form.isheading = "true,false"
Вы могли бы попытаться предположить, что порядки всегда будут одинаковыми (и они, вероятно, будут, но для меня это слишком много волшебства), и сделать что-то, когда вы зацикливаетесь на длине поля, которое, как вы знаете, должно быть заполнено из. Вы можете сделать скрытое поле или что-то в этом роде, но это будет выглядеть примерно так:
<cfset ingredients = arrayNew(1)>
<cfloop from="1" to ="#listLen(form.quantity)#" index="i">
<cfset ingredient = structNew()>
<cfset ingredient.quantity = listGetAt(form.quantity,i)>
<cfset ingredient.quantityType = listGetAt(form.quantityType,i)>
{and so on...}
<cfset listAppend(ingredients,ingredient)>
</cfloop>
и получим множество ингредиентов.
Что бы я действительно сделал, так это чтобы имена форм имели итеративное число, а затем вы могли бы собрать их с помощью чего-то вроде
form["quantity#i#"] - which would give you the value of quantity1, quantity2, etc.