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

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

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

на СТРАНИЦЕ ВФ:

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

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


person Kirill Yunussov    schedule 28.02.2012    source источник


Ответы (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)}";
person Jeremy Ross    schedule 28.02.2012

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

JavaScript страницы Visualforce:

var jsSafeText = "{!JSENCODE(mergeField)}";
person manubkk    schedule 29.02.2012
comment
Синтаксис похож на +Jeremy Ross Sais: var deliveryRequirements = {!JSENCODE(shippingAddress.Delivery_Requirements__c)}; - person Pablo Martinez; 19.08.2014