我有一张带有动态表的表单。当它提交进行一些计算时,我需要经过原始检查的复选框再次进行检查。我确实带回了一个sq_claim_ids列表,其中逗号分隔了#form.number#,我无法找出使coldfusion循环遍历列表的语法,并勾选标记列中值的每一行。我知道我应该使用cfif标签,但我不知道我需要的其余部分的正确语法
<CFOUTPUT query = "qGetOpenItemsTrans">
<TR>
<TD ALIGN = "CENTER">
<input type="checkbox" name = "chkbx" id='#ID#' value="#seq_claim_id#" onClick="goFurther(this)" unchecked = 0 >
</TD>
<TD ALIGN = "CENTER">#Inventory_Date#</TD>
<TD ALIGN = "CENTER">#seq_claim_id#</TD>
<TD ALIGN = "CENTER">#Month_Closed#</TD>
<TD ALIGN = "CENTER">#Amount_Rcvd_by_FRG#</TD>
<TD ALIGN = "CENTER">#Commission_Amt#</TD>
<TD ALIGN = "CENTER">#Net_Recovery#</TD>
</TR>
</CFOUTPUT>
<cfif (form.number) NEQ "">
<cfloop index="i" list="#form.number#" delimiters=",">
</cfif>
答案 0 :(得分:3)
尝试这个概念。
<cfset lang_list = "C,C++,Java">
<cfoutput >
<form method="post">
Favorite Programing Language:
<cfloop list="#lang_list#" index="i" >
<cfif structKeyExists(FORM,"fav") and listFind(FORM.fav,i)>
<cfset isChecked = "checked">
<cfelse>
<cfset isChecked = "">
</cfif>
<input type="checkbox" name="fav" value="#i#" #isChecked#>#i#
</cfloop>
<input type="submit" value="Submit">
</form>
</cfoutput>
答案 1 :(得分:0)
<cfset ischecked = "">
<cfif (form.number) NEQ "">
<CFOUTPUT query = "qGetOpenItemsTrans">
<cfif #ListFind(#form.number#, #qGetOpenItemsTrans.seq_claim_id#)# NEQ 0>
<cfset isChecked = "checked">
</cfif>
<TR>
<TD ALIGN = "CENTER">
<input type="checkbox" name = "chkbx" id='#ID#' value="#seq_claim_id#" onClick="goFurther(this)" unchecked = 0 #ischecked# >
</TD>
<TD ALIGN = "CENTER">#Inventory_Date#</TD>
<TD ALIGN = "CENTER">#seq_claim_id#</TD>
<TD ALIGN = "CENTER">#Month_Closed#</TD>
<TD ALIGN = "CENTER">#Amount_Rcvd_by_FRG#</TD>
<TD ALIGN = "CENTER">#Commission_Amt#</TD>
<TD ALIGN = "CENTER">#Net_Recovery#</TD>
</TR>
<cfset ischecked = "">
</CFOUTPUT>
<cfelse>
<CFOUTPUT query = "qGetOpenItemsTrans">
<TR>
<TD ALIGN = "CENTER">
<input type="checkbox" name = "chkbx" id='#ID#' value="#seq_claim_id#" onClick="goFurther(this)" unchecked = 0 >
</TD>
<TD ALIGN = "CENTER">#Inventory_Date#</TD>
<TD ALIGN = "CENTER">#seq_claim_id#</TD>
<TD ALIGN = "CENTER">#Month_Closed#</TD>
<TD ALIGN = "CENTER">#Amount_Rcvd_by_FRG#</TD>
<TD ALIGN = "CENTER">#Commission_Amt#</TD>
<TD ALIGN = "CENTER">#Net_Recovery#</TD>
</TR>
</CFOUTPUT>
</cfif>
答案 2 :(得分:0)
首先,正如Leigh所说,使用ListFind()
而不是ListContains()
。这很重要,而不仅仅是语义。 #ListContains("42,17,32",4)#
将匹配并导致选中复选框。 #ListFind("42,17,32",4)#
将(正确地)不匹配,因为没有单个元素等于4.这里的潜力可能是灾难性的,保持不变。如果用户没有意识到错误地检查了盒子,则记录可能会被不可撤销地更改或删除。
其次,Deepak的答案非常好,但这是使用内联if语句的绝佳机会。
使用Cold Fusion 9或Railo 3.1+,您可以使用像这样的内联if语句
<input type="checkbox" name="fav" value="#i#"
#(structKeyExists(FORM,"fav") and listfind(FORM.fav,i) ? "checked" : "")#>
以上格式的内联Ifs为#(condition ? expression-if-true : expression-if-false)#
对于其中任何一个版本的旧版本,您可以使用Iif函数,尽管IIf附带了一点点耻辱。
<input type="checkbox" name="fav" value="3"
#IIf(structKeyExists(FORM,"fav") and listfind(FORM.fav,i),DE("checked"),"")#>
Iif语法为#iif(condition, expression-if-true, expression-if-false)#
。但是,传递一个字符串,如上面的“checked”,你必须将其包装在DE()中,否则Cold Fusion(和Railo)将查找一个名为的变量。
如果你可以使用CF9的内联ifs而不是IIf,那么除非向后兼容是一个问题,否则这样做。
上述两种方法与Deepak的回答具有相同的目的,Leigh的ListFind()
更正,并且所有方法都与
<input type="checkbox" name="fav" value="3"
<cfif (structKeyExists(FORM,"fav") and listfind(FORM.fav,i))>checked</cfif>>
除了添加一些视觉效果之外,这段代码运行良好,但许多html编辑器自动格式化功能都可以做到这一点,比如
<input type="checkbox" name="fav" value="3"
<cfif (structKeyExists(FORM,"fav") and listfind(FORM.fav,i))>
checked
</cfif>
>
或者完全破坏代码。