ColdFusion变量未正确设置

时间:2012-04-19 12:05:38

标签: coldfusion

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

这是使用的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会被覆盖而不管检查的条件如何。 或者还有其他方法可以达到这个目的吗?

提前致谢

3 个答案:

答案 0 :(得分: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>

<强>解释

这里你的主要问题是你的标签内部有一个带有coldfusion的Javascript,并且似乎混淆了每种语言的作用。

首先,Coldfusion呈现HTML。就Coldfusion而言,javascript if语句只是文本,因此它看到了以下逻辑

<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>标签内。

答案 1 :(得分:0)

如果您要提交复选框并然后设置下一个表单的表单操作(表单2 - 选中复选框后)我认为您要执行的操作如下:< / p>

<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值更改为您想要的任何一个。

但最重要的是,你会想到什么是“服务器端”以及什么是“客户端”......这就是你正在滑倒的地方。祝你好运:)

答案 2 :(得分:0)

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