Javascript/Coldfusion 表单循环验证
Javascript/Coldfusion Form Loop Validation
我有一个表格,表格内部有一个循环。我正在尝试为表单创建动态验证但失败了,因为当表单提交时它只验证最后一个循环。我研究并尝试了许多不同的场景,当然,都失败了!任何帮助或指点将不胜感激!
<cfform name="form" id="form" method="post">
<cfset Peoplecount = 1>
<cfloop index="Add" from="1" to="#session.checkout.quantity.pcount#" step="1">
<div class="clearfix">
<cfinput type="text" name="firstname_#Add#" id="firstname_#Add#" placeholder="First" validateat="onSubmit" validate="noblanks" message="Please enter owner #Peoplecount#'s first name." value="#evaluate("session.checkout.info.firstname_#Add#")#">
<cfinput type="text" name="middlename_#Add#" id="middlename_#Add#" placeholder="Middle" value="#evaluate("session.checkout.info.middlename_#Add#")#">
<cfinput type="text" name="lastname_#Add#" id="lastname_#Add#" placeholder="Last" validateat="onSubmit" validate="noblanks" message="Please enter owner #Peoplecount#'s last name." value="#evaluate("session.checkout.info.lastname_#Add#")#">
</div>
<script type="text/javascript">
function Validate<cfoutput>#Add#</cfoutput>() {
$('#firstname_<cfoutput>#Add#</cfoutput>').prop('required',true);
$('#middlename_<cfoutput>#Add#</cfoutput>').prop('required',false);
$('#lastname_<cfoutput>#Add#</cfoutput>').prop('required',true);
}
</script>
<cfinput type="submit" name="Submit" value="Submit" onClick="Validate<cfoutput>#Add#</cfoutput>();">
此外,我感到困惑的是,如果循环为 1,则一切正常,但如果循环为任何大于 1 的数字,则它仅验证最后一个循环
当它是这样的:
function Validate() {
<cfinput type="submit" name="Submit" value="Submit" onClick="Validate();">
循环结束是这样的:
<cfif Add NEQ session.checkout.quantity.pcount>
<div class="labelspace">
<label for="andor_<cfoutput>#Add#</cfoutput>"><strong>Please indicate if "or" or "and" is to be shown on title when issued.</strong></label>
<cfinclude template="../../../ddl/andor.cfm" >
</div><br>
<cfelse>
<cfinput type="submit" name="Submit" value="Submit" onClick="Validate();">
</cfif>
<cfset Peoplecount = PeopleCount + 1>
</cfloop>
没有看到你在哪里结束你的 cfloop,我只是在这里假设。但是假设 cfloop 在代码的最后。您最终会得到多个提交按钮,其中每个按钮只会 "validate" 每个提交按钮每 3 个输入。
这是我的建议:
- 不要重新发明轮子。查看 jQuery.validate 插件。另外,摆脱
<cfinput>
并只使用 <input>
- 无需通过 jQuery 添加所需的 属性,只需将其作为
required="required"
添加到您的 cfinput
- 不要使用
evaluate()
。而是这样做 value="#session.checkout.info["lastname_" & Add]#"
我有一个表格,表格内部有一个循环。我正在尝试为表单创建动态验证但失败了,因为当表单提交时它只验证最后一个循环。我研究并尝试了许多不同的场景,当然,都失败了!任何帮助或指点将不胜感激!
<cfform name="form" id="form" method="post">
<cfset Peoplecount = 1>
<cfloop index="Add" from="1" to="#session.checkout.quantity.pcount#" step="1">
<div class="clearfix">
<cfinput type="text" name="firstname_#Add#" id="firstname_#Add#" placeholder="First" validateat="onSubmit" validate="noblanks" message="Please enter owner #Peoplecount#'s first name." value="#evaluate("session.checkout.info.firstname_#Add#")#">
<cfinput type="text" name="middlename_#Add#" id="middlename_#Add#" placeholder="Middle" value="#evaluate("session.checkout.info.middlename_#Add#")#">
<cfinput type="text" name="lastname_#Add#" id="lastname_#Add#" placeholder="Last" validateat="onSubmit" validate="noblanks" message="Please enter owner #Peoplecount#'s last name." value="#evaluate("session.checkout.info.lastname_#Add#")#">
</div>
<script type="text/javascript">
function Validate<cfoutput>#Add#</cfoutput>() {
$('#firstname_<cfoutput>#Add#</cfoutput>').prop('required',true);
$('#middlename_<cfoutput>#Add#</cfoutput>').prop('required',false);
$('#lastname_<cfoutput>#Add#</cfoutput>').prop('required',true);
}
</script>
<cfinput type="submit" name="Submit" value="Submit" onClick="Validate<cfoutput>#Add#</cfoutput>();">
此外,我感到困惑的是,如果循环为 1,则一切正常,但如果循环为任何大于 1 的数字,则它仅验证最后一个循环
当它是这样的:
function Validate() {
<cfinput type="submit" name="Submit" value="Submit" onClick="Validate();">
循环结束是这样的:
<cfif Add NEQ session.checkout.quantity.pcount>
<div class="labelspace">
<label for="andor_<cfoutput>#Add#</cfoutput>"><strong>Please indicate if "or" or "and" is to be shown on title when issued.</strong></label>
<cfinclude template="../../../ddl/andor.cfm" >
</div><br>
<cfelse>
<cfinput type="submit" name="Submit" value="Submit" onClick="Validate();">
</cfif>
<cfset Peoplecount = PeopleCount + 1>
</cfloop>
没有看到你在哪里结束你的 cfloop,我只是在这里假设。但是假设 cfloop 在代码的最后。您最终会得到多个提交按钮,其中每个按钮只会 "validate" 每个提交按钮每 3 个输入。
这是我的建议:
- 不要重新发明轮子。查看 jQuery.validate 插件。另外,摆脱
<cfinput>
并只使用<input>
- 无需通过 jQuery 添加所需的 属性,只需将其作为
required="required"
添加到您的 cfinput
- 不要使用
evaluate()
。而是这样做value="#session.checkout.info["lastname_" & Add]#"