1

私のコードは以下です。ページの読み込み時にデフォルトで両方のチェックボックスをオンにする必要があります。これにより、クエリの結果が表示されます。チェックボックスの 1 つがオフになっている場合は、フォームを送信する必要があり、さまざまなクエリ結果を表示する必要があります。チェックボックスのチェックを外しても、チェックボックスは常にチェックされています。誰かが私をここに案内してもらえますか?

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

3 に答える 3

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>
于 2013-04-02T17:43:28.303 に答える
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>
于 2013-04-02T17:51:55.347 に答える
0

問題は、フォームが送信されたときに入力 (chk1およびchk2) DO がフォーム スコープに存在することです。ただし、それらの値は空です。

これを実証するには、チェックのform前にスコープをダンプします。isdefined

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

フォーム スコープ ダンプ

value入力のまたはlength属性をチェックする必要があります。

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

しかし!

これは実際にはあなたがやりたいことではないようです。CHECKBOXchk1入力ではなく、chk2TEXT入力です。

チェックボックスに基づいて動作する場合は、チェックボックスの入力をチェックする必要があります。これにより、別の問題が発生します。チェックボックスの属性をvalue設定していません。value

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

ここで、paramこれらのチェックボックスの値を確認して、フィールドが存在することを確認する必要があります

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

そして、値を確認します

<cfif form.chkbox1 EQ 1>
    query 1
</cfif>
于 2013-04-02T18:24:09.320 に答える