以编程方式触发 Coldfusion 中的事件
Programmatically trigger event in Coldfusion
该页面使用数据(将数据写入数据库),当 Coldfusion 页面完成后,我希望它重新提交回原始的 html/javascript 页面。简而言之,我希望 Coldfusion 页面以编程方式触发提交事件。我该怎么做?注意:我不能使用 Ajax,因为我们的环境不允许跨站点脚本。
HTML/JS (MainForm.html):
<form name="myForm" action="processStuff.cfm">
<input type="submit" name="btnSubmit">
</form>
CF:
<cfif IsDefined("Form.btnSubmit")>
. . . Do a bunch of stuff, then submit back to MainForm.html . . .
</cfif>
也许您想要的是重定向回表单?如果是这样,只需使用 cflocation
.
<cfif isDefined("form.btnSubmit")>
. . . Do a bunch of stuff, then submit back to MainForm.html . . .
<cflocation url="MainForm.html" />
</cfif>
这实际上完全取决于您的代码。您使用的是框架吗?您是否正在使用氟氯化碳。您是否使用纯过程代码?等。
但为了简单起见,假设您正在编写过程代码,并将模型和视图合并在一起。
只需在同一.用于显示表单的 CFM 文件。然后,您的表单将提交回同一页面。
我的表格.cfm
<html><body>
<cfif structKeyExists(form, "btnSubmit")>
<cfquery>
INSERT INTO formResults(name)
VALUES(<cfqueryparam value="#form.name#" cfsqltype="CF_SQL_VARCHAR">)
</cfquery>
</cfif>
<form method="POST">
Name: <input type="text" name="name">
<input type="submit" name="btnSubmit">
</form>
</body></html>
在常规冷聚变页面中,以这种方式设置。
形式.cfm
<cfif isDefined("form.submitb") and form.submitb is "yes">
... submit form
<cfelse>
... show form ...
</cfif>
你可以这样做
其他页面.cfm
<cfset form.submitb = "yes" />
<cfset form.firstname = "John" />
<cfset form.lastname = "Doe" />
<cfinclude template="form.cfm">
如果您使用的是最新版本的 CF/Railo,您可以...
<cfset StructAppend(form, {submitb = "yes", firstname = "John", lastname = "Doe"}, false) />
其中false
是 OverWriteFlag 的值,它指定如果发生冲突,第二个结构的值是否会覆盖第一个结构的值。
请注意,我们不会将 StructAppend 的值分配给像 <cfset form = StructAppend{....}>
这样的变量。这样做会将表单的值设置为 true
,这将是不好的。其他一些功能(如ArrayAppend()
)以相同的方式工作。
我们也可以说
<cfset form = {....}>
但您可能不想擦除和覆盖 otherpage.cfm 的表单数据。
最后,提交表单时,Cold Fusion 会生成一个名为 form.fieldnames
的字段,其中包含表单中所有表单元素的字段名称。以编程方式添加到窗体范围时不会生成此值。
<cfset form.newfield = "test" />
将newfield
添加到表单范围,但不会将newfield
添加到 form.fieldnames 列表中。解决方法是(如果需要)
<cfset ffnames = StructKeyList(form) />
<cfif listfind(ffnames,"fieldnames") />
<cfset ffnames = ListDeleteAt(ffnames,ListFind(ffnames,"fieldnames")) />
</cfif>
有很多方法可以做到这一点。我喜欢根据它是get
还是post
来分离行为。
<cfif cgi.request_method EQ "post">
<cfquery>
INSERT INTO formResults(name)
VALUES(<cfqueryparam value="#form.name#" cfsqltype="CF_SQL_VARCHAR">)
</cfquery>
</cfif>
<form method="POST">
Name: <input type="text" name="name">
<input type="submit">
</form>
- 分派点击事件并保留击键修饰符
- 模糊事件的Javascript测试
- keyup事件处理程序更改焦点不适用于快速键入
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使Javascript动态html表及其上的事件
- 使用类从一个标记中双击事件
- 如何在未直接触发的情况下停止事件
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 对iPad上的点击事件反应缓慢
- 事件和状态
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- 从控制器返回后Ajax启动事件激发
- 如何从画布上的某个移动事件中获取X和Y
- Jquery:未触发select事件
- JsFiddle上的鼠标事件不起作用
- 只覆盖箭头键滚动事件
- $window.ga在AngularJS事件中未定义
- cron作业与Javascript计时事件
- 以编程方式触发 Coldfusion 中的事件