0

背景

我的公司网站有一个数据库,其中我将零件存储在一个表中,将零件选项存储在另一个表中。

当用户单击“添加到购物车”按钮时,将提交以下示例数据(用 抓取<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>元素和复选框的组合(参见水冷闭环:Turmoil OCO-20R Chiller - Pascal Technologies, Inc示例)。每个<select>都有名称“选项”,因此这些值作为您在上面看到的逗号分隔列表返回。

我希望能够使用单选按钮而不是<select>每个部分选项少于四个项目的列表的元素。显然,单选按钮需要单独的名称才能正确分组,但我需要将它们提交的数据插入到列表中的适当位置。


问题

我尝试将单选按钮命名为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[] is undefined

关于原始错误的旁注。IsDefined需要一个变量的名称。省略引号FORM.options[]会强制首先对其进行评估,从而导致您试图防止的错误。如果不是方括号,正确的语法应该是:

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

但是 Adob​​e 的IsDefined函数只接受有效的变量名。因此,如果您的字段确实被命名为“options[]”,则需要改用 structKeyExists:

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

为什么不为每个单选按钮使用相同的名称?由于是收音机,他们只能选择一个。

于 2012-09-19T21:07:58.970 回答