2012-04-19 104 views
0

我有一些html元素的形式。它有一個默認選中的複選框。提交按鈕的點擊它會調用基於它必須做的動作的複選框條件submitForm功能 。如果複選框是Y,那麼它必須執行一個表單操作,如果沒有檢查,則執行另一個操作。使用JavaScript我已經檢查過它是否被選中。但我無法爲此設置coldfusion變量。總是覆蓋變量。 下面是代碼片段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和它進入形式的其他條件不論條件。 。但是當我提醒它的價值來正確。 我也無法使用隱藏變量,因爲最初沒有調用窗體。根據檢查的條件只有它被訪問。 可能有人請告訴我爲什麼form_condn_var被覆蓋,被檢查的條件無關。 或者還有其他方法可以實現嗎?

在此先感謝

+0

我已經閱讀了幾次,你的問題仍然不清楚:)忘記代碼片刻。簡單英語的目標是什麼?下面是我的看法:「我的表單有一個複選框,當選中該框時,我想將表單提交給'somePage.cfm',否則我想將它提交給'someOtherPage.cfm'」。這聽起來是對的嗎? – Leigh 2012-04-19 16:30:58

+0

您在submitForm()函數中將JS邏輯與CFML混合在一起。您不能使用JS條件來設置CF變量。 – 2014-10-16 17:24:10

回答

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> 

說明

粘貼什麼這裏你的主要問題是你有一個coldfu標籤外的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>標籤內。

+0

看來form.Show_Final_Model是一個複選框,它不會等於'Y'。如果已定義,則知道用戶已選中該框就足夠了。否則,瀏覽器將不會提交。 – 2012-04-19 13:36:37

+0

理論上可以有多個具有相同名稱和不同值的複選框,因此假設存在等於預期響應的情況並不能保證。 – 2012-04-19 13:47:31

+0

雖然他的代碼沒有意義(JS/CF的混合),但他似乎很清楚,他只是使用'Y'和'N'來表示是否被檢查。 – 2012-04-19 13:52:12

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的值更改爲你想要的值。

但最重要的是在你的腦海裏解決什麼是「服務器端」和什麼是「客戶端」..這就是你滑倒的地方。祝你好運:)

0

我不確定我是否正確理解了這個問題,但似乎這種情況可以純粹在基於條件處理的操作頁面上基於表單結果複選框值處理。基於複選框的值,不是根據複選框的值將表單發送到兩個不同的操作模板,而是根據對複選框表單值的條件處理在操作模板上相應地處理表單。