0

我有一个带有一些 html 元素的表单。它有一个默认选中的复选框。单击提交按钮时,它会根据复选框条件调用 submitForm 函数,它必须执行操作。如果复选框为 Y,则必须执行一个表单操作,如果未选中则执行另一个操作。使用 javascript 我检查了它是否已检查。但我无法为此设置冷融合变量。它总是覆盖变量。下面是代码片段

这是使用的 ColdFusion 变量。这是默认设置为 Y

 <cfset form_condn_var = 'Y'/>

 function submitForm(){
  if (document.getElementById('Show_Final_Model').checked) 
  {
form.Show_Final_Model.value = 'Y';
  }
 else{
<cfset form_condn_var = 'N'/>
 }
}

 <cfif '<cfoutput>#form_condn_var#</cfoutput>' eq 'Y'>
<form id="form1" action="test.cfm" method="POST" target="testmain">
 <cfelse>
<form id="form1" action="<cfoutput>#something#</cfoutput>" method="POST" target="_blank" onSubmit="">
</cfif>

它总是将变量 form_condn_var 设置为 N,并且无论条件如何,它都会进入表单的 else 条件。. 但是当我提醒它的值时它是正确的。我也不能使用隐藏变量,因为最初没有调用表单。根据检查的条件,只有它被访问。有人可以告诉我为什么 form_condn_var 会被覆盖,而不管检查的条件如何。或者有没有其他方法可以实现这一目标?

提前致谢

4

3 回答 3

0

我不确定我是否正确理解了这个问题,但似乎这种情况可以纯粹在基于表单复选框值结果的条件处理的操作页面上处理。无需根据复选框的值将表单发送到两个不同的操作模板,只需根据复选框表单值的条件处理在操作模板上相应地处理表单。

于 2012-04-19T17:39:53.183 回答
0

简短版 如果我正确理解了您的逻辑,那么您可以将粘贴的所有内容替换为以下内容<cfif>

<cfif IsDefined('form.Show_Final_Model') AND form.Show_Final_Model EQ 'Y'>
    <form id="form1" action="test.cfm" method="POST" target="testmain">
<cfelse>
    <form id="form1" action="<cfoutput>#something#</cfoutput>" method="POST" target="_blank" onSubmit="">
</cfif>

解释

您在这里的主要问题是您在标签之外有 Javascript,其中包含冷融合,并且似乎混淆了每种语言的功能。

首先,Coldfusion 呈现 HTML。对于 Coldfusion 而言,javascriptif语句只是文本,因此它看到以下逻辑

<cfset form_condn_var = 'Y'>
<cfset form_condn_var = 'N'>
<cfif form_condn_var EQ 'Y'>  <!--- form_condn_var === '<cfoutput>#form_condn_var#</cfoutput>' but much cleaner --->
    .......
<cfelse>
    .......
</cfif>

反过来导致以下 HTML 被呈现

function submitForm(){
    if (document.getElementById('Show_Final_Model').checked) 
    {
        form.Show_Final_Model.value = 'Y';
    }
    else{

    }
}

<form id="form1" action="<cfoutput>#something#</cfoutput>" method="POST" target="_blank" onSubmit="">

我怀疑在您的示例中您删除了一些逻辑,否则 Javascript 将作为纯文本输出,因为它不在<script>标签内。

于 2012-04-19T12:33:18.850 回答
0

如果您要提交复选框,然后为下一个表单设置表单操作(表单 2 - 在您选择复选框之后),我认为您想要做的是以下内容:

<cfparam name="form.Show_Final_Model" default="N"/>

<cfif form.Show_Final_Model IS 'Y'>
<form id="form1" action="test.cfm" method="POST" target="testmain">
 <cfelse>
<form id="form1" action="<cfoutput>#something#</cfoutput>" 
    method="POST" target="_blank" onSubmit="">
</cfif>

这将在处理程序页面上(提交表单后)。你不需要 JS 函数。

但是,如果您尝试根据复选框的选中或取消选中将表单的操作参数更改为其他内容(换句话说 - 使用相同的表单),那么您的所有代码都需要是 javascript 并且 CF 几乎没有什么可做的用它。设置 2 个变量 - 动作 a 和动作 b,检查选中的表单元素的值并将 form.action 值更改为您想要的任何一个。

但最重要的是要牢记什么是“服务器端”和什么是“客户端”......这就是你犯错的地方。祝你好运 :)

于 2012-04-19T14:01:48.027 回答