我有一个ColdFusion 10表单,正在其中添加一个新的多重选择列表
<SELECT multiple="multiple" id="icd9list"
name="icd9list"
size="2"
class="pageText2"
style="width:400px;">
</SELECT>
它可以正确显示在表单上,并且可以使用JavaScript向其中添加项目,但是当我处理表单时,表单操作页面出现以下错误:
元素ICD9LIST在FORM中未定义。
我已经在初始表单页面以及出现错误的表单操作页面上添加了cfparam标记。
我一辈子都无法弄清楚为什么它没有将form元素传递到操作页面。该方法是post
,因此应该将其提取。页面上的所有其他表单元素都可以正常使用。
<cfform action="updform.cfm" name="custform" method="POST">
我还尝试使用custform.icd9list
并遇到相同的问题:
ICD9LIST元素在CUSTFORM中未定义。
此页面是一些非常旧的代码,我们无法真正回过头来重构太多。我唯一想的是,当页面首次加载时,多选选项为空白,然后我们通过事件后的弹出窗口通过javascript向其中添加选项。当我检查Chrome中的元素时,在向其中添加选项之后,它们就在那里了,但是我想知道它是否仍被视为空白的多选列表。我确实知道,如果我删除了multiple属性,并将form元素视为一个下拉列表,它将在表单转储中显示为一个值,但只有第一个(或所选的任何值)。
开始认为答案可能是隐藏字段填充了选项值,然后让表单读取该字段。
答案 0 :(得分:4)
将选项添加到多个选择列表中还不够。也必须选择它们。否则,该列表不会被视为successful control,并且字段不会会传递到操作页面(强调我的信息)
成功提交的控件对提交是“有效的”。每次成功 控件的控件名称与当前值配对,作为 提交的表单数据集。必须定义成功的控制 在FORM元素中,并且必须具有控件名称。
但是:
- 被禁用的控件无法成功。
- 如果一个表单包含多个提交按钮,则仅激活的提交按钮成功。
- 所有“启用”复选框都可能成功。
- 对于共享相同name属性值的单选按钮,只有“ on”单选按钮可能会成功。
- 对于菜单,控件名称由SELECT元素提供,而值由OPTION元素提供。只能选择的选项是 成功。 如果未选择任何选项,则控件不会 成功,并且名称和任何值均未提交给 提交表单时使用服务器。
- 文件选择的当前值是一个或多个文件名的列表。提交表格后,每个文件的内容将 与其余表单数据一起提交。文件内容是 根据表单的内容类型打包。
- 对象控件的当前值由对象的实现决定。
我怀疑表单在提交表单之前没有强迫项目被“选择”,这就是为什么操作页面上没有任何内容的原因。
答案 1 :(得分:2)
听起来您需要两件事之一
在客户端都需要
<SELECT multiple="multiple" required id="icd9list" name="icd9list" size="2" class="pageText2" style="width:400px;">
...
</SELECT>
或者确保ColdFusion可以处理服务器端不存在的它。
<cfparam name="icd9list" default="">
如所指出的,
<cfparam name="form.icd9list" default="">
范围将会更紧密
答案 2 :(得分:0)
您如何致电表格?您使用的是form.variable
还是icd9list.variable
?除非页面上有多种形式,否则您不必给它提供ID或名称。您可以仅name
和ID
您的元素,并像这样引用它:form.name