在字符串中遇到换行符时,Javascript无法在Visual Force页面上工作

Javascript not working on a Visual Force page when new line character is encountered in a String

本文关键字:Force Visual 工作 Javascript 字符串 遇到 换行符      更新时间:2023-09-26

因此,我注意到VisualForce页面上的一段Javascript在某些情况下可以工作,而在其他情况下则无法工作。JS对我们拥有的一个自定义对象的textArea字段进行了一些操作。我意识到只要textArea字段中有换行符或回车符(''n和''r),JS就会崩溃。

因此,我最终在页面控制器中使用了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为某些记录工作而不是为其他记录工作的人。

如果你知道它为什么会坏,一定要告诉我。

Visualforce有一个名为JSENCODE的函数,用于对文本和合并字段值进行编码,以便在JavaScript中使用。这个函数也应该适用于换行。

Visualforce页面javascript:

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

它正在中断,因为JavaScript不允许字符串中的文字换行。这可能会在允许断线的情况下修复它:

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

然后在VF页面中,从上面绑定到getter:

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

更新:

曼努布克的答案更好。但我认为正确的javascript语法应该是:

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