Javascript не работает на странице Visual Force, когда в строке встречается символ новой строки - PullRequest
1 голос
/ 28 февраля 2012

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

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

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

Ответы [ 2 ]

6 голосов
/ 29 февраля 2012

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

javascript страницы Visualforce:

var jsSafeText = "{!JSENCODE(mergeField)}";
4 голосов
/ 28 февраля 2012

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

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

Затем на странице VF свяжите с получателем сверху:

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

Обновление:

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

var deliveryRequirements = "{!JSENCODE(shippingAddress.Delivery_Requirements__c)}";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...