我正在尝试验证是否已在ColdFusion中通过服务器端选择了一个单选按钮。如果为空,则文本输入错误输出,但是,如果未选择任何单选按钮组,则单选按钮组不会触发错误。我似乎无法找到任何关于此的文档。
<cfform name="mobile_device_request" id="form" action="">
Text Box:
<cfinput type="Text" name="subscriber" message="Please enter in a subscriber" required="yes" validateat="onserver">
Subscriber:
<cfinput type="Radio" name="service_provider" value="AT&T" required="yes" validateat="onserver"><span class="label">AT&T</span>
<cfinput type="Radio" name="service_provider" value="Sprint" required="yes" validateat="onserver"><span class="label">Sprint</span>
<cfinput type="Radio" name="service_provider" value="Verizon" required="yes" validateat="onserver"><span class="label">Verizon</span>
答案 0 :(得分:2)
<强>解释强>
要回答你的问题,虽然我从未使用过该功能,但我会说这是一个错误。
根据documentation onServer
验证工作,自动附加具有特殊命名约定的隐藏表单字段。然后,CF服务器检查certain patterns in form field names的所有请求,例如以_required
或_cfformrequired
结尾的请求,如果找到,则在相关字段上执行验证。
如果您查看cfform的来源,请注意CF已添加了几个隐藏字段:
<input type='hidden' name='subscriber_CFFORMREQUIRED' value='Please enter in a subscriber'>
<input type='hidden' name='service_provider_CFFORMREQUIRED' value='Error in service_provider text.'>
<input type='hidden' name='service_provider_CFFORMREQUIRED' value='Error in service_provider text.'>
<input type='hidden' name='service_provider_CFFORMREQUIRED' value='Error in service_provider text.'>
那些应该触发两个字段的CF服务器端验证。但是,正如您发现它只适用于文本字段,而不适用于单选按钮。虽然奇怪的是,如果您手动添加以_required
结尾的隐藏字段,它会正常工作:
<input type="hidden" name="service_provider_required"
value='You forgot to select a service_provider'>
<强>答案:强>
同样,我认为您所看到的行为可能是一个错误。坦率地说,有许多cfform
之一。就个人而言,我建议放弃cfform/cfinput
。使用普通的html输入并编写自己的验证。由于它是一个单选按钮,因此只有在选中其中一个按钮时才会定义该字段。所以你可以测试该字段的存在:
<cfif NOT structKeyExists(FORM, "service_provider")>
no service_provider selected. do something
</cfif>
...或者指定一个默认值,并测试该值:
<!--- default to empty string --->
<cfparam name="FORM.service_provider" default="">
<cfif NOT len(FORM.service_provider)>
no service_provider selected. do something
</cfif>