2012-02-28 1 views
0

Так что я заметил, что часть Javascript на моей странице VisualForce работала в некоторых случаях и не была в других. JS выполнял некоторые операции в поле textArea из одного из настраиваемых объектов. Я понял, что JS ломается всякий раз, когда в поле textArea появилась новая строка или символ возврата каретки (\ n и \ r).Javascript не работает на странице Visual Force, когда встречается новый символ строки в строке

Таким образом, я закончил использование метода replaceAll() в контроллере страницы и удалив все эти символы из этого поля TextArea при загрузке страницы. К тому времени, когда он попал в JS, это была юридическая строка.

на странице VF:

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

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

в контроллере:

//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', ' '); 

Проводка это как головки вверх для тех, кто сталкивается с JS работает для некоторых записей, а не для других.

Если у вас есть представление о том, почему он ломается, расскажите.

ответ

3

Это ломается, потому что JavaScript не разрешает литальные разрывы строк в строках. Это, вероятно, исправить это, позволяя разрывы строк:

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

Затем на странице VF, связывается с геттером сверху:

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

Update: ответ

manubkk является лучше. Но я думаю, что правильный синтаксис Javascript будет:

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

Visualforce имеет функцию под названием JSENCODE для кодирования текста и объединить значения полей для использования в JavaScript. Эта функция также должна работать для разрывов строк.

Visualforce страница JavaScript:

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

Синтаксис похож + Джереми Росс Sais: вар deliveryRequirements = "{JSENCODE (shippingAddress.Delivery_Requirements__c)!}"; –