我的公司网站有一个数据库,我将零件存储在一个表中,而部分选项存储在另一个表中。
当用户点击“添加到购物车”按钮时,会提交以下示例数据(使用<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>
元素和复选框的组合(有关示例,请参阅Water Cooled Closed Loop: Turmoil OCO-20R Chiller - Pascal Technologies, Inc)。每个<select>
都有名称“Options”,因此值将以上面显示的逗号分隔列表的形式返回。
我希望能够为每个零件选项少于四个项目的列表使用单选按钮而不是<select>
元素。显然,无线电按钮需要单独的名称才能正确分组,但我需要将他们提交的数据插入到适当位置的列表中。
我尝试将radiobuttons命名为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
我确信这是我错过的;任何想法?
P.S。 - 如果我被迫坚持<select>
元素,那么我会这样做,但出于UI的原因,我更喜欢无线电按钮。
答案 0 :(得分: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
功能只接受valid variable names。因此,如果您的字段确实被命名为“options []”,则需要使用structKeyExists:
<cfif structKeyExists(FORM, "options[]")>
答案 1 :(得分:1)
为什么不为每个单选按钮使用相同的名称?由于它是无线电,因此只能选择一个。