0

私は CF の開発を少し行っていますが、私が抱えていた問題で立ち往生していました。キーボードで頭を叩く代わりに、もう少し経験のある人に聞いてみようと思いました。

だからここに私が扱っているものがあります:

<form name="inv" action="action.cfm" method="post" >

<cfoutput query="getQuery">

<input type="checkbox" name="ischecked" value="1" unchecked />
<input type="Hidden" name="DeviceID" value="#DeviceID#">
</td>

    <td><font size="3"><b>Device ID:</b></font>#DeviceID#</td>
    <td><font size="3"><b>User</b></font>#User#</td>
    <td><font size="3"><b>Tag:</b></font>#Tag#</td>
  </table>
  </cfoutput>
      <table>
          <tr><td> Action: </td>
           <td>

           <select name="choose_action">



            <option value="1"> Action 1 </option>

            <option value="2"> Action 2  </option>

            <option value="3"> Action 3  </option>


        </select>

<INPUT type="reset" name="reset" action="reset">

<INPUT type="submit" name="submit" action="submit">


        </td>
        </tr>

したがって、基本的には、クエリからすべての情報を出力し (正常に動作しています)、ループして表示するこのフォームがあります。ユーザーがこの情報を見て、特定のデバイスのチェックボックスをクリックし、下部のメニューに基づいてアクションを実行できるようにしたいと考えています。これにより、アクション ページに移動し、渡された情報を使用してクエリを実行できます。 cfif ループに基づいています。

私が抱えている問題は、ループであるため、ユーザーが具体的にチェックしたい情報を渡す方法がわからないことです。デバイス ID を含む非表示フィールドを送信すると、チェックボックスがあるすべてのデバイス ID (すべて) を送信することになります。チェックボックスの値についても同様です。最初にチェックした 1 つのデバイス ID だけではなく、クエリ内の各デバイスのアクション ページにすべてのクエリ データをダンプするだけです。

私はいくつかのバックエンド JS を考えていましたが、それをどのように行うかについては完全にはわかりませんでした。私はそれを検証して、送信する前に、「これがチェックされている場合は、この特定のデバイス ID のみを送信してください」と言うことができることを望んでいました。

お時間をいただき、フィードバックをお寄せいただきありがとうございます。何か明確にする必要がある場合はお知らせください。

4

2 に答える 2

5

ここに2つの答えがあります(そして私は両方を見ました)。

まず、デバイス ID をチェックボックスの「名前」の一部にしてみてください。

<cfoutput query="getQuery">

<input type="checkbox" name="ischecked_#deviceID#" value="1" unchecked />

</cfoutput>

次に、次のようにフォームをループします。

<cfloop collection="#form#" item="fItem">
   <cfif listfirst(fItem,'_') IS 'ischecked'>
      <cfset thisDeviceID = listlast(fItem,'_')>
       ...do something with deviceID
   </cfif>
</cfloop>

2 番目の方法は、次のように「ischecked」フォーム フィールドにデバイス ID を格納することです。

<cfoutput query="getQuery">

<input type="checkbox" name="ischecked" value="#deviceID#" unchecked />

</cfoutput>

値は、チェックされたものを含むリストとして渡されます... したがって、ユーザーが 1、5、および 7 をチェックすると、変数 #form.isChecked# は 1,5,7 のようなリストになります。listfind や cfloop などを使用して何かを行います。form.isChecked が存在することを確認するために check を使用する必要があることを覚えておいてください。

于 2012-04-18T15:58:25.713 に答える
1

これを行うには複数の方法がありますが、一般的な考え方は、動的なフィールド名と値を使用することです...

<input type="checkbox" name="ischecked" value="#DeviceID#" />

<select name="choose_action_#DeviceID#">

同じ名前の複数のフィールドは、ColdFusion でリストとして表されます

<cfloop query="..">
    <cfif listfindnocase(form.ischecked, DeviceID)>
        <cfif form['choose_action_#DeviceID#'] eq 1>


        <cfelseif form['choose_action_#DeviceID#'] eq 2>

        etc

        </cfif>

    </cfif>
</cfloop>
于 2012-04-18T16:00:16.763 に答える