【问题标题】:Checkbox in a ColdFusion formColdFusion 表单中的复选框
【发布时间】:2013-04-02 17:29:14
【问题描述】:

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

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

【问题讨论】:

    标签: javascript coldfusion cfml


    【解决方案1】:

    您已将复选框命名为相同的东西并且总是检查它们,那么为什么不检查它们呢?

    您需要对它们进行唯一命名,并在提交页面后检查该键是否存在于表单中。或者在表单未提交时显示为选中状态

    表单尚未提交-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>
    

    【讨论】:

    • 抱歉,复选框是 chk1 和 chk2
    • @user747291:请在您的问题中解决这个问题。
    【解决方案2】:

    您可以通过多种方式完成您想要做的事情。我不确定你的隐藏字段的目的是什么,所以我修改了一些东西以尝试让生活更轻松。

    有些人可能会建议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>
    

    【讨论】:

    • 感谢史蒂夫,当两个复选框都被选中时,我需要显示一个 qeury 结果。我可以用这个条件吗? 查询3
    • 这两个复选框仍然处于选中状态,即使我取消选中一个并点击立即查看。有什么想法吗?
    • 我刚刚测试了我盒子上的所有东西。复制并粘贴上面所有突出显示的代码,然后从一个干净的表单开始。默认情况下,这两个框都被选中。如果我现在单击查看,它们仍处于选中状态并显示查询 1 查询 2。如果我只取消选择协议,然后点击查看,它会重新加载突出显示的活跃员工。我可以取消选中活跃员工并仅检查协议,然后单击立即查看,协议仅保持突出显示。
    • 对于勾选复选框不勾选,是这样吗? ?我仍然无法获得结果权。
    • 是我的首选方式...它可能会以另一种方式工作。
    【解决方案3】:

    问题是提交表单时输入(chk1chk2)确实存在于表单范围内。但是,它们的值是空的。

    为了证明这一点,请在您的 isdefined 检查之前转储 form 范围。

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

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

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

    但是!

    这实际上似乎不是您想要做的。 chk1chk2 是您的 TEXT 输入,而不是您的 CHECKBOX 输入。

    如果您想根据 复选框 进行操作,则需要检查复选框输入的 value - 这给我们带来了另一个问题:您没有设置 @987654333复选框的@属性。

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

    现在,您需要param 这些复选框的值,以确保字段完全存在

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

    然后检查值

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

    【讨论】:

    • 您的初始声明和转储与原始帖子的代码不一致。 chk1 和 chk2 不是隐藏字段的名称。
    • 我复制并粘贴了他帖子中的代码以进行转储 - 他提到的更改是另一条评论中的拼写错误。
    • 我现在有这个工作除了一件事,当我取消选中两个复选框,现在点击视图,因为正在设置 cfparam 框总是被选中。是否有任何 javascript 函数可以帮助我重置 form.chkbox 的值?
    • 你为什么将这些值默认为?如果您将它们默认为 0 并且仅在值为 1 时对其进行预检查,则在加载表单时不会对其进行预检查。
    猜你喜欢
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2012-10-28
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    相关资源
    最近更新 更多