0

バックグラウンド

会社のサイトのデータベースがあり、パーツを1つのテーブルに格納し、パーツオプションを別のテーブルに格納しています。

ユーザーが[カートに追加]ボタンをクリックすると、次のサンプルデータが送信されます(で取得<cfdump>)。

ADDDESCRIPTION: Mass Meters
ADDPARTNUMBER: M-                         //part number minus option suffixes
ADDPRICE: 0                               //if 0 then is RFQ
FIELDNAMES:                               //form field names
OPTIONS: .5 SCCM,5M,AIR,,_,_,Standard     //part options list

<select>現在、私は要素とチェックボックスの組み合わせを使用しています(例については、水冷閉ループ:TurmoilOCO-20Rチラー-PascalTechnologies、Incを参照してください)。それぞれ<select>に「Options」という名前が付いているため、値は上記のカンマ区切りのリストとして返されます。

<select>パーツオプションあたりのアイテムが4つ未満のリストでは、要素ではなくラジオボタンを使用できるようにしたいと考えています。明らかに、ラジオボタンを適切にグループ化するには個別の名前が必要ですが、ラジオボタンが送信するデータをリストの適切な位置に挿入する必要があります。


問題

ラジオボタンに名前を付け、options[#id#]すべての要素にアクセスしてみました

<cfif qPartOptionGroups.recordcount is not 0>  <!--- There are possible options for this part --->
    <cfif not isDefined(FORM['options[]']) or qPartOptionGroups.recordcount is not ListLen(FORM['options[]'])>
        <cfset ValidForm="">
        <cfset InfoSpan="#InfoSpan#The number of options specified does not match the number of options available [#qPartOptionGroups.recordcount#] please add the item to your cart again.<br>">
    <cfelse>

しかし、それは未定義の要素の例外をスローし、Element options[] is undefined in a Java object of type class coldfusion.filter.FormScope

それは私が見逃したものだと確信しています。何か案は?

PS-<select>要素に固執することを余儀なくされた場合はそうしますが、UIの理由からラジオボタンを好みます。

4

2 に答える 2

3

明らかに、ラジオボタンを適切にグループ化するには個別の名前が必要ですが、ラジオボタンが送信するデータをリストの適切な位置に挿入する必要があります。

私はあなたがそれを両方の方法で持つことができるとは思いません。個別のグループが必要な限り、各グループの値は個別に送信されます。ただし、グループに順番に名前を付けた場合、つまりoption_1,option_2,...サーバー側で値を連結することはできます。(javascriptを使用して値を連結し、それらを非表示フィールドに格納することもできますが、クライアント側ではなくサーバー側のオプションを探しているように聞こえました)

<!--- use sequentially numbered fields and store total number in hidden field --->
<input type="radio" name="option_1" ...>
<input type="radio" name="option_1" ...>

<input type="radio" name="option_2" ...>
<input type="radio" name="option_2" ...>

<input type="radio" name="option_3" ...>
<input type="radio" name="option_3" ...>

<input type="hidden" name="numberOfOptions" value="3">

アクション

<!--- create list of selected options --->
<cfset variables.options = "">
<cfloop from="1" to="#form.numberOfOptions#" index="x">
    <cfif structKeyExists(FORM, "option_"& x)>
        <cfset variables.options = listAppend(variables.options, form["option_"& x)>
    </cfif>
</cfloop>


Element options []が未定義であると言って、未定義の要素例外をスローします

元のエラーに関する補足。変数IsDefined名前が必要です。引用符を省略するFORM.options[]と、最初に評価されるようになり、防止しようとしているエラーが発生します。角かっこがない場合、正しい構文は次のようになります。

     <cfif IsDefined("FORM.options[]")>

ただし、 Adobeの関数は有効な変数名IsDefinedのみを受け入れます。したがって、フィールドの名前が実際に「options []」である場合は、代わりにstructKeyExistsを使用する必要があります。

     <cfif structKeyExists(FORM, "options[]")>
于 2012-09-19T21:44:30.070 に答える
1

各ラジオボタンに同じ名前を使用してみませんか?ラジオなので1つしか選べません。

于 2012-09-19T21:07:58.970 に答える