Checkbox coldfusion选中列表中的所有框

Checkbox coldfusion选中列表中的所有框,checkbox,coldfusion,Checkbox,Coldfusion,我有一个带有动态表的表单。当提交一些计算时,我需要再次选中最初选中的复选框。我确实带回了一个逗号删除的sq_claim_id的列表#form.number#,我无法理解让coldfusion循环列表并选中列表中每一行的值的语法。我知道我可能应该使用cfif标记,但我不知道我需要的其余部分的正确语法是什么 <CFOUTPUT query = "qGetOpenItemsTrans"> <TR> <TD ALIGN = "CENTER">

我有一个带有动态表的表单。当提交一些计算时,我需要再次选中最初选中的复选框。我确实带回了一个逗号删除的sq_claim_id的列表#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>

#存货日#
#seq_索赔编号#
#月休#
#按FRG计算的金额#
#佣金金额#
#净回收率#
试试这个概念

<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>

最喜欢的编程语言:
#我#

这对我很有效。因为这个表已经循环了,所以我在它周围使用了一个cfif标记

<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>

#存货日#
#seq_索赔编号#
#月休#
#按FRG计算的金额#
#佣金金额#
#净回收率#
#存货日#
#seq_索赔编号#
#月休#
#按FRG计算的金额#
#佣金金额#
#净回收率#
展开

首先,正如Leigh所说,在
ListContains()上使用
ListFind()
。这很重要,不仅仅是语义
#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" : "")#>
Iif语法是
#Iif(条件,表达式如果为真,表达式如果为假)#
。但是,传递一个字符串,如“checked”`如上所述,必须将其包装在DE()中,否则Cold Fusion(和Railo)将查找名为checked的变量

如果您可以在IIf上使用CF9的内联ifs,请熟练地这样做,除非向后兼容性是一个问题

以上两种方法的作用与Deepak的答案相同,Leigh的
ListFind()
更正,所有方法都与Deepak的答案相同

<input type="checkbox" name="fav" value="3"
   <cfif (structKeyExists(FORM,"fav") and listfind(FORM.fav,i))>checked</cfif>>

除了添加一些可视化的bloath之外,这段代码工作得很好,但是许多html编辑器的自动格式化功能都会使用它来做一些古怪的事情,比如

<input type="checkbox" name="fav" value="3"
  <cfif (structKeyExists(FORM,"fav") and listfind(FORM.fav,i))>
    checked
  </cfif>
>


或者干脆完全破坏代码。

没有足够的细节。您是否将表单提交给自己?换句话说,如果表单位于abc.cfm上,表单标签是否会说action=“abc.cfm”?您的问题令人困惑。您的复选框名为“chkbx”,但您的描述引用了
form.number
,这在上述代码中没有定义。另外,不完整的cfloop代码应该做什么也不清楚。小的修正。不要在此处使用
listContains
,因为它匹配部分字符串。因此,如果选中“C++”(仅限),则在重新加载表单时,“C”和“C++”框都将被选中。而是使用
listFind/FindNoCase
。在这种情况下,我不能使用structkeyexists。我需要cfif基本上说,如果复选框的值存在于这个逗号分隔的列表中,请选中markyes,您可以使用
StructKeyExists
。听起来您误解了示例以及复选框的操作方式。复选框仅在选中时才提交。因此,如果只使用字段而不首先验证它是否存在,则可能会出现错误。这就是structKeyExists代码的目的。验证是否选中了某些内容,然后使用列表函数确定要重新选择的框。很好,您已经解决了该问题,最好返回并共享您的解决方案,以尝试帮助其他人,但这很难阅读,而且很容易意外断开。您应该按照Deepak的建议执行,并在cfif语句中将最后一个移到a
。您可以通过消除if/else造成的重复来简化上述操作。不确定
form.number
代表什么,但无论该字段是否为空,
listFind
代码都应该有效。我已使用listFind()更新了答案。但是关于
IIF
我不确定,因为很多CF最佳实践指南都说不要使用它。例如:我也不认为IIF一定是一种最佳实践,我只是简单地展示了CF/railo的旧版本可以如何复制它。你读过吗?然而,我从未见过CF9+的条件Ifs语法有什么不好的地方。在很多情况下,它是不合适的,或者不是一个增益,但是我认为使用它来放置标记属性是一个理想的用法。然而,在IIf上,你读过吗?他发现IIF和CFIF并驾齐驱,像我们大多数人一样,对IIF不屑一顾。当然,这两篇文章都有年历史了。是的,使用
IIF
,代码看起来更干净,性能也可能相同。我不确定。
<input type="checkbox" name="fav" value="3"
  <cfif (structKeyExists(FORM,"fav") and listfind(FORM.fav,i))>
    checked
  </cfif>
>