ColdFusion中<CFSELECT>标签的required="yes"属性是否实际生效?
ColdFusion
<CFSELECT> 标签required="yes"属性生效说明 required="yes"在单选下拉形态(即你需要的普通下拉选择框,size=1)的<CFSELECT>上默认无法触发内置必填校验,这是标签本身的内置逻辑设定,不属于代码写法错误。
问题原因
ColdFusion自带的cfform表单校验逻辑中,针对<CFSELECT>的required属性校验,仅在标签为列表框形态(size>1或开启多选模式)时才会触发,普通单选下拉场景会直接跳过该属性的校验判断,这也是你在Adobe文档中仅能找到size<>1相关说明的原因。
实现方案
方案1:保留<CFSELECT>标签使用
给下拉框新增一个值为空的默认首选项,自行补充校验逻辑即可,兼容前后端校验场景:
<!-- 前端带即时校验示例 --> <cfform action="target.cfm" method="post" onsubmit="return validateSelect()"> <cfselect name="category" id="categorySel" query="categoryQry" display="catName" value="catId"> <option value="">-- 请选择分类 --</option> </cfselect> <cfinput type="submit" value="提交"> <script> function validateSelect(){ const selVal = document.getElementById('categorySel').value; if(!selVal){ alert('请选择分类后再提交'); return false; } return true; } </script> </cfform> <!-- 后端兜底校验(必须加,避免前端校验被绕过) --> <cfif structKeyExists(form, "submit")> <cfif !len(trim(form.category))> <cfset errorMsg = "请选择分类"> </cfif> </cfif>
方案2:替换为原生select标签
直接弃用<CFSELECT>的内置表单逻辑,使用原生<select>标签自行实现校验,不受ColdFusion版本差异影响,兼容性更强:
<form action="target.cfm" method="post" onsubmit="return validateForm()"> <select name="category" id="categorySel"> <option value="">-- 请选择分类 --</option> <option value="1">分类1</option> <option value="2">分类2</option> </select> <input type="submit" value="提交"> </form>
注意:从ColdFusion MX到ColdFusion 2023的所有正式版本中,该标签逻辑均未做调整,属于长期存在的设计疏漏,自行补充校验是最稳定的解决方式,无需反复排查标签属性写法问题。
内容的提问来源于stack exchange,提问作者Mr Jackson
相关产品推荐
相关产品推荐

