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