【问题标题】:ColdFusion 10 getting element is undefined in form errorColdFusion 10获取元素在表单错误中未定义
【发布时间】:2018-08-27 17:47:24
【问题描述】:

我有一个 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 中检查元素时,在我添加了选项之后,它们就在那里,但我想知道它是否仍被视为空白的多选列表。我确实知道,如果我删除多个属性并将表单元素视为单个下拉列表,它会在表单转储中显示一个值,但只有第一个(或任何选择的)值。

开始认为答案可能是设置一个填充了选项值的隐藏字段,然后让表单读取它。

【问题讨论】:

  • 你真的在选择什么吗?将项目添加到多项选择并不意味着什么,您仍然需要实际选择项目。过去我在提交时这样做,只需选择所有已添加的项目即可。
  • @haxtbh 即使你不选择任何东西,SELECT 表单元素是否仍然存在?
  • 您是否在此页面上使用任何其他 JS 库?如果您从多个中删除属性值并仅键入 multiple,会发生什么情况?
  • @Shawn 不,有点像复选框、单选按钮或任何禁用的表单项。如果它们没有被勾选/激活等,它们就不会在表单范围内传递。
  • “尝试使用 custform.icd9list” FWIW,您从不使用 cfform 的名称。在 CF 中,POST 变量总是提交到名为 FORM 的特殊系统作用域(无论 cfform/form 的名称如何)。

标签: coldfusion multi-select coldfusion-10 cfml


【解决方案1】:

向多选列表添加选项是不够的。他们也必须被选中。否则,列表不会被视为successful control,并且字段不会传递到操作页面(强调我的)

成功的控件对于提交是“有效的”。每一个成功的 控件将其控件名称与其当前值配对,作为 提交的表单数据集。必须定义成功的控件 在 FORM 元素中,并且必须有一个控件名称。

但是:

  • 禁用的控件无法成功。
  • 如果一个表单包含多个提交按钮,只有激活的提交按钮是成功的。
  • 所有“打开”复选框都可能成功。
  • 对于具有相同 name 属性值的单选按钮,只有“on”单选按钮可能成功。
  • 对于菜单,控件名称由 SELECT 元素提供,值由 OPTION 元素提供。只有选定的选项可能是 成功的。 未选择任何选项时,控件不 成功并且名称和任何值都不会提交给 提交表单时的服务器
  • 文件选择的当前值是一个或多个文件名的列表。提交表单后,每个文件的内容是 与其余的表单数据一起提交。文件内容是 根据表单的内容类型打包。
  • 对象控件的当前值由对象的实现决定。

我怀疑表单并没有在提交表单之前强制“选择”项目,这就是为什么操作页面上没有显示任何内容的原因。

【讨论】:

    【解决方案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="">
    

    将获得更严格的范围

    【讨论】:

    • 更好的是,同时使用两者;-) @jjasper0729 - 还要确保在cfparam中包含范围,即&lt;cfparam name="form.icd9list default="">`。
    【解决方案3】:

    您是如何调用表单的?您使用的是form.variable 还是icd9list.variable?除非页面上有多个表单,否则您不必为其指定 ID 或名称。你可以只 nameID 你的元素并像这样引用它:form.name

    【讨论】:

    • 我在 updform.cfm (表单操作文件)中将其引用为 form.icd9list
    • 这不是您访问表单变量的方式。您基本上是在说 form.form,因为您将表单命名为 icd9list。从表格中删除姓名和 ID。然后根据需要命名和标识输入。示例:
      您希望将其引用为 form.name
    • 而且您还希望您的 cfparam 为 name="form.name" 并且每次调用它时都需要指定为 form.name 除非您将 form.name 设置为新的变量名.
    • no.. 表单实际上被命名为“custform”(参见初始帖子中的 cfform 标签)。我会尝试看看 custform.icd9list 是否有效。 icd9list 是表单元素名称
    • 试试 custform.icd9list,但如果它不起作用,我想看看你的代码,这样我就可以更容易地告诉你出了什么问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多