2012-02-28 1 views
0

그래서 Visualforce 페이지의 Javascript 부분이 일부 경우에만 작동하고 다른 곳에서는 그렇지 않은 것으로 나타났습니다. JS 우리가 가진 사용자 지정 개체 중 하나에서 textArea 필드에 대한 일부 작업을 수행하고있었습니다. JS가 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의 대답은 더 좋다. 하지만 올바른 자바 스크립트 구문이있을 거라고 생각 :

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

없이 VisualForce 텍스트를 인코딩 JSENCODE라는 함수를 가지고 있으며, 자바 스크립트에서 사용하기 위해 필드 값을 병합합니다. 이 함수는 줄 바꿈에도 작동합니다. 자바 스크립트

없이 VisualForce 페이지 :

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

구문은 + 제레미 로스 SAIS 같다 : var에 deliveryRequirements의 = "{JSENCODE (shippingAddress.Delivery_Requirements__c)!}"; –

관련 문제