2013-04-02 42 views
1

我的代码如下。当页面加载时,我需要默认选中这两个复选框。这显示查询的结果。现在,当其中一个复选框未选中时,需要提交表单并显示不同的查询结果。即使取消选中复选框,也会检查复选框。有人可以在这里指导我吗?ColdFusion表格中的复选框

<form action="abc.cfm?show=yes" method="post" name="myform"> 
    <table align="center"> 
    <tr> 
     <td> 
      <input type="checkbox" checked="checked" name="chkbox" id="chkbox1"> <strong> Agreement Only</strong> 
      &nbsp;&nbsp;<input type="hidden" name="chk" id="chk1"> 
      <input type="checkbox" checked="checked" name="chkbox" id="chkbox2"> <strong>Active Employees</strong> 
      &nbsp;&nbsp;<input type="hidden" name="chk" id="chk2"> 
     </td> 
     <td> 
      <input type="Submit" name="submitnow" value="View now"> 
     </td> 
    </table> 
</form> 

<cfif isdefined("form.chk1")> 
    query 1 
<cfelseif isdefined("form.chk2")> 
    query 2 
</cfif> 

回答

5

您已将复选框命名为相同的东西并始终检查它们,所以为什么不检查它们?

您需要唯一命名它们,并检查页面提交后表单中是否存在该键。 NOT structKeyExists(form,'fieldnames')

形式已经提交,并被选为chkbox1 - - structKeyExists(form,'chkbox1')

<td> 
    <input type="checkbox"<cfif NOT structKeyExists(form,'fieldnames') OR structKeyExists(form,'chkbox1')> checked="checked"</cfif> name="chkbox1" id="chkbox1"> <strong> Agreement      Only</strong> 
    &nbsp;&nbsp;<input type="hidden" name="chk" id="chk1"> 
    <input type="checkbox"<cfif NOT structKeyExists(form,'fieldnames') OR structKeyExists(form,'chkbox2')> checked="checked"</cfif> name="chkbox2" id="chkbox2"> <strong>Active     Employees</strong> 
    &nbsp;&nbsp;<input type="hidden" name="chk" id="chk2"> 
    </td> 
+0

对不起,这是一个类型的复选框chk1和chk2 – user747291

+1

@ user747291:请在你的问题中解决这个问题。 – ale

1

有多种,或当表单没有被提交

形式尚未提交显示框作为托运你可以完成你想要做的事情。我不确定你隐藏的领域的目的是什么,所以我修改了一些东西,试图让生活变得更轻松。

有些人可能会建议structkeyexists,但我不想介绍一个你可能不熟悉的新命令。

<cfparam name="form.chkbox" default=""> 

<form action="abc.cfm?show=yes" method="post" name="myform"> 
    <table align="center"> 
    <tr> 
     <td><input type="checkbox" <cfif form.chkbox eq "" or listfind(form.chkbox, 1)>checked="checked"</cfif> name="chkbox" id="chkbox1" value="1"> 
     <strong> Agreement      Only</strong> &nbsp;&nbsp; 
      <input type="checkbox" <cfif form.chkbox eq "" or listfind(form.chkbox, 2)>checked="checked"</cfif> name="chkbox" id="chkbox1" value="2"> 
     <strong>Active     Employees</strong> &nbsp;&nbsp; 
</td> 
     <td><input type="Submit" name="submitnow" value="View now"></td> 
    </table> 
</form> 
<cfif listfind(form.chkbox, 1) and listfind(form.chkbox,2)> 
    query 1 
    query 2 
</cfif> 
+0

感谢史蒂夫,我需要显示一个qeury结果,当两个复选框被选中。我可以使用这个条件吗? 查询3 user747291

+0

我更新了代码以反映您正在查找的内容。 – steve

+0

2个复选框仍然保持检查状态,即使在取消选中一个复选框后立即点击查看。有任何想法吗? – user747291

0

的问题是,所述输入(chk1chk2)DO的形式范围的形式被提交时存在。然而,他们的价值观是空的。

为了证明这一点,您isdefined检查之前dump出来form范围。

<cfdump var="#form#" label="form scope"> 

form scope dump

您需要进行检查的输入valuelength属性。

<cfif len(form.chk1)> 
    query 1 
</cfif> 

但是!

这实际上并不似乎是你想要做什么。 chk1chk2是你TEXT的投入,而不是你复选框输入。

如果您想设置基于复选框行事,你需要检查的复选框,输入value - 这给我们带来了另外一个问题:你没有设置value属性的复选框。

<input type="checkbox" value="1"...> 

现在,你需要param这些复选框的值,以确保在任何

<cfparam name="form.chkbox1" value="0"> 

存在字段,然后检查值

<cfif form.chkbox1 EQ 1> 
    query 1 
</cfif> 
+0

您的初始声明和转储不符合原始帖子的代码。 chk1和chk2不是隐藏字段的名称。 –

+0

我复制并粘贴了他的帖子中的代码来做转储 - 他提到的变化是另一个评论中的拼写错误。 –

+0

我现在有这个工作,除了一件事情,当我取消选中这两个复选框,并立即点击查看,因为cfparam正在设置,箱子总是被检查。任何javascript函数都可以帮助我重置form.chkbox的值吗? – user747291