0

いくつかの html 要素を含むフォームがあります。デフォルトでオンになっているチェックボックスがあります。送信ボタンをクリックすると、アクションを実行する必要があるチェックボックスの条件に基づいて、submitForm 関数が呼び出されます。チェックボックスが Y の場合、1 つのフォーム アクションを実行する必要があり、チェックされていない場合は別のアクションを実行する必要があります。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 が上書きされる理由を教えてください。または、これを達成できる他の方法はありますか?

前もって感謝します

4

3 に答える 3

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 はほとんど行う必要がありません。それと。アクション a とアクション b の 2 つの変数を設定し、チェックされたフォーム要素の値を確認し、form.action の値を必要な値に変更します。

しかし、最も重要なことは、「サーバー側」とは何か、「クライアント側」とは何かについて頭に入れておくことです..それがあなたが間違っているところです. 幸運を :)

于 2012-04-19T14:01:48.027 に答える
0

質問を正しく理解しているかどうかはわかりませんが、この状況は、フォームのチェックボックス値の結果に基づく条件付き処理に基づいて、純粋にアクション ページで処理できるように思われます。チェックボックスの値に基づいてフォームを 2 つの異なるアクション テンプレートに送信する代わりに、チェックボックス フォーム値の条件付き処理に基づいてアクション テンプレートに応じてフォームを処理します。

于 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="">

あなたの例では、<script>タグ内にないため、Javascriptがプレーンテキストとして出力されるため、いくつかのロジックを削除したと思われます。

于 2012-04-19T12:33:18.850 に答える