验证表单 - 动态表中不同行的总和

时间:2017-06-08 16:48:04

标签: javascript validation coldfusion

我无法确定如何验证用户提交特定表单的最佳方法。根据用户的不同,他/她将能够编辑具有州或整个国家的区域以及所有区域。所以我需要验证他们为所有状态输入的内容等于他们的区域分配(对于每一列)。如果用户具有国家访问权限,我需要确保所有地区都达到全国总数。

我在HTML和Coldfusion中编码,但如果使用javascript进行验证,则无关紧要。结果将是动态的,因此我不想对任何验证进行硬编码,因为查询是动态的。在某些情况下,3-13中的所有行将等于第1行,3-12等于第2行。在某些情况下,第2-7行应该等于第1行。每种情况可能不同。

这是我的表单显示代码。任何帮助将不胜感激。

<cfloop index="i" from="1" to="#getdata.recordcount#">
<tr id="editrow#i#" style="background-color:##f0f0f0">
    <td>#getdata.location[i]#</td>
    <td><input type="text" class="form-control" id="initial#i#" name="initial#i#" value="#numberFormat(getdata.initial[i],'9,999')#"></td>
    <td><input type="text" class="form-control" id="recon#i#" name="recon#i#" value="#numberFormat(getdata.recon[i],'9,999')#"></td>
    <td><input type="text" class="form-control" id="cdr#i#" name="cdr#i#" value="#numberFormat(getdata.cdr[i],'9,999')#"></td>
    <td><input type="text" class="form-control" id="other#i#" name="other#i#" value="#numberFormat(getdata.cdr[i],'9,999')#"></td>
</tr>
</cfloop>

1 个答案:

答案 0 :(得分:0)

在表单中包含名为recordCount的隐藏字段。然后,您可以在操作页面上验证表单,如下所示:

<cfset recordCount = form.recordCount>

<cfset validationValInitial = 0>
<cfset validationValRecon = 0>
<cfset validationValCDR = 0>
<cfset validationValOther = 0>

<cfloop list="#form.fieldnames#" index="fieldname">
    <!--- Use first 3 letters to identify each category of fields --->
    <cfswitch expression="#left(fieldname,3)#">
        <cfcase value="ini"><!--- initial1, initial2, ... --->
            <cfloop from="1" to="#recordCount#" index="rowNo">
                <cfif rowNo GTE 3 and rowNo LTE 13>
                    <cfset validationValInitial = validationValInitial + form['initial' & rowNo]>
                </cfif>
            </cfloop> 
        </cfcase>
        <cfcase value="rec"><!--- recon1, recon2, ... --->

        </cfcase>
        <cfcase value="cdr"><!--- cdr1, cdr2, ... --->

        </cfcase>
        <cfcase value="oth"><!---other1, other2, ... --->

        </cfcase>
    </cfswitch>
</cfloop>

/*
Here, I have assumed that the validation rule for the fields initial1, initial2, ... is that the sum of the values in rows 3 to 13 equals the value in row 1. Use this as an example, and work out the rest. 
*/

<cfif validationValInitial EQ form.initial1>
<!--- valid --->
<cfelse>
</cfif>