2012-03-21 9 views
7

を脱出します。私はデータベースに格納されているものに対して入力されたテキストをチェックし、変更を保存/破棄するかどうかを尋ねる確認ウィンドウをポップアップするjavascript関数を持っています。ColdFusionの/ Javascriptのは、私はこれは私がちょうど何とか欠けていることをシンプルなものになるだろう知っているが、ここではそれが行く単一引用符

ユーザが入力したテキストに引用符(シングルまたはダブル)が含まれていると、javascriptが完全に終了します。コンテンツが一致するかどうかを確認する機能を維持しながら、引用符をエスケープする必要があります。

私はescape()とreplace()関数を(単独で)一緒に試しましたが、何も問題はありません。

例のjavascript:

function change_question(){ 
    var feedback = document.getElementById('feedback').value; //this is what the user has entered on the page 
    var stored_feedback = "#trim(StoredFeedback)#"; //this is what is stored in the database; retrieved via ColdFusion 

    if (feedback != stored_feedback) { 
     if (confirm('You have unsaved data on the page. Do you wish to discard your changes?')) { 
      //go to next page 
     } 
    } 
    else { 
      //go to next page 
    } 
} 

感謝。

+0

JSONエンコードユーティリティがある場合は、それを使用します。 – Pointy

答えて

12

ではJavaScript

var stored_feedback = "#jsStringFormat(StoredFeedback)#"; 
+0

これは完璧です、サムに感謝します! 1つの質問tho - どのようにフィードバック変数(つまり、ユーザーが何を入力した?)に使用することができます – shimmoril

+0

編集:Nevermind、私はそれを考え出した: 'var feedback_string = document.getElementById( 'feedback')。 var feedback = #jsStringFormat( 'feedback_string')#; ' – shimmoril

0

私はColdFusionを知っているが、ドキュメントに応じていない:

var stored_feedback = #SerializeJSON(trim(StoredFeedback))#; 

私はJSONにシリアライズは、二重引用符で終わる必要があります文字列として、明示的に引用符を追加する必要はありませんだと思うとにかく繰り返しますが、私はこれを自分でテストすることはできません。

HTMLEditFormat(string) 

HTMLエスケープ文字列:あなたは、ColdFusionのソリューションを探しているならjsStringFormatに建て

+0

上記のハッシュ文字は不要です。 –

+0

@DavidFaberは本当ですか? ColdFusionはJavaScriptをコードではなくコードとして解釈する必要があることをColdFusionがどのように認識しますか? – Pointy

+2

ハッシュ文字が必要です。デビッドは意図した行がCFコンテキスト内にあると考えていたと思っていますが、cfoutput内で使用するためのJavaScriptコンテキストにあります。 –

0

のためにエスケープします、あなたはおそらくこれを使用することをお勧めします。戻り文字は削除されます。改行文字は保存されます。 HTMLの特別な意味を持つ文字は、>などのHTML文字エンティティに変換されます。

+0

ありがとうございました。 DBに出入りするデータはすべてHTMLEditFormatを使用していますが、ユーザーが入力した(保存されていない)データは実際には問題でした。 – shimmoril

+0

HTMLエスケープは、値をJavaScriptコードに出力する場合には役に立ちません。 – Pointy

関連する問題

 関連する問題