Javascript не работает на странице Visual Force, когда новый символ строки встречается в строке

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

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

на VF PAGE:

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

//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, работающим для некоторых записей, а не для других.

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

2 ответа

Это ломается, потому что 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)}";


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

Страница Visualforce javascript:

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

licensed under cc by-sa 3.0 with attribution.