我是coldfusion的新手,我正在尝试为用户创建一个静态下拉列表,以便选择一个值并将其存储在变量中。错误是: 元素DROPDOWN.VALUE在FORM中未定义。
这就是我的代码:
<cfform method='post'>
<cfselect name='dropDown' default='blue'>
<option value="blue">Blue</option>
<option value="red">Red</option>
<option value="white">White</option>
</cfselect>
</cfform>
<cfset color = #form.dropDown.value#>
答案 0 :(得分:1)
您不需要使用cfform
,而Dan表示在您提交表单之前表单范围不可用
<form method='post'>
<select name='dropDown'>
<option value="blue" selected>Blue</option>
<option value="red">Red</option>
<option value="white">White</option>
</select>
</form>
<cfset color = structKeyExists(form, 'dropDown') ? form.dropDown : 'blue'>
答案 1 :(得分:0)
在使用POST提交表单之前,FORM范围不可用。
您想要做的事情可以通过以下两种方式之一完成,这两种方式都不需要使用cfform,事实上我建议您不要先使用cfform。 HTML表单语法使用起来非常简单,最终会使您成为更好的开发人员,因为您编写的前端代码并不依赖于ColdFusion来运行。 CF UI的功能集(cfform,cfwindow等)在很多年前发布时就已经有了它的位置,但是从那时起Web开发的世界已经取得了重大进展,这已不再是处理UI的最佳方式。像jQuery和Bootstrap这样的东西可以帮助处理布局和使事情看起来很好的事情。
无论如何,对于你的问题,有两种方法可以做你想做的事情,具体取决于你想要做什么。如果您尝试在每次用户选择不同颜色时立即更改背景颜色,您将需要查看使用javascript,因为ColdFusion代码在客户端看到页面之前完全执行但JavaScript在客户端中运行&# 39;浏览器。 jQuery(一个JavaScript框架)将极大地简化这一过程。
但是,如果你只是想根据之前提交的表单到页面运行一些Coldfusion代码,那么Matt Busche的答案就是完全可行的方法。关于他给出的示例有两件事,cfset
不必在表单之后,它可以在页面中的任何位置,因为它将对从先前表单提交中提交的数据起作用。另一个是他在coset
中使用三元运算符(如果你以前从未见过它们,看起来很奇怪和混乱,请阅读更多关于这些的内容:http://www.bennadel.com/blog/1643-learning-coldfusion-9-the-ternary-operator.htm)来检查下拉值是否存在来自之前的表单提交(除了提交的表单之外,它不会在任何时候加载页面),然后设置默认值(如果它不存在)。问号之前的所有内容都是布尔检查,然后冒号分割值的两个可能位置(使用strctKeyExists
为真的表单变量,如果不是,则使用蓝色的硬编码值)。