2012-02-28 15 views
0

VisualforceページのJavascriptが一部のケースで動作していて、 JSは私たちが持っているカスタムオブジェクトの1つからtextAreaフィールド上でいくつかの操作を行っていました。 textAreaフィールドに改行文字または改行文字がある場合(\ nと\ r)JSが改行されていることに気付きました。JavaScriptでビジュアルフォースのページで作業していない場合文字列に改行文字が含まれている場合

私はページコントローラーでreplaceAll()メソッドを使用し、これらの文字をすべてページロード時のtextAreaフィールドから削除しました。それがJSに来るまでには、それは合法的な文字列でした。 JSは、他人のために一部のレコードのために働いていない遭遇した人のためのヘッドアップとしてこれを投稿

//a fix for the text area field - '\n' and '\r' breaks JS on the VF page   
shippingAddress.Delivery_Requirements__c = shippingAddress.Delivery_Requirements__c.replaceAll('\r\n', ' '); 

:コントローラで

<script language="JavaScript"> 
function someFunction() { 
    var leftOver = 220;   

    if('{!shippingAddress.Delivery_Requirements__c}'.length > 0){ 
     leftOver -= '{!shippingAddress.Delivery_Requirements__c}'.length; 
    }            
}    
</script> 

VFページ上

なぜそれが壊れているかについての洞察がある場合は、教えてください。

答えて

3

JavaScriptは文字列のリテラル改行を許可していないため、壊れています。

public String getDeliveryRequirements() { 
    return shippingAddress.Delivery_Requirements__c.replace('\r\n', '\\r\\n'); 
} 

を次に上からゲッターにVFページ、苦境に:

if('{!DeliveryRequirements}'.length > 0){ 
    leftOver -= '{!DeliveryRequirements}'.length; 
}  

更新:

manubkkの答えは優れているができるように改行しながら、これはおそらく、それを修正するでしょう。しかし、私は正しいjavascriptの構文があることだと思う:

var deliveryRequirements = "{!JSENCODE(shippingAddress.Delivery_Requirements__c)}"; 
5

のVisualforceは、テキストを符号化するためのJSENCODEと呼ばれる機能を有しており、JavaScriptで使用するためのフィールド値をマージします。 この関数は改行にも有効です。 JavaScriptの

Visualforceページ:

var jsSafeText = "{!JSENCODE(mergeField)}"; 
+0

構文は+ジェレミー・ロス・サイスのようなものです:VARのdeliveryRequirements = "{!JSENCODE(shippingAddress.Delivery_Requirements__c)}"; –

関連する問題