当在String中遇到换行符时,Javascript无法在Visual Force页面上运行

Kir*_*sov 1 javascript salesforce visualforce

所以我注意到我的VisualForce页面上的一段Javascript在某些情况下正在运行,而在其他情况下却没有.JS正在从我们拥有的一个自定义对象的textArea字段上执行一些操作.我意识到只要textArea字段中有一个新的行或回车字符(\n和\ r),JS就会破坏.

所以我最终在页面控制器中使用了replaceAll()方法,并在页面加载时从该textArea字段中删除了所有这些字符.当它到达JS时,它是一个合法的字符串.

在VF PAGE上:

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

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

在控制器中:

//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', ' ');
Run Code Online (Sandbox Code Playgroud)

发布此信息是为了遇到JS工作某些记录而不是其他人的人.

如果您对它破裂的原因有所了解,请告诉我们.

man*_*bkk 6

Visualforce有一个名为JSENCODE的函数,用于编码文本和合并字段值,以便在JavaScript中使用.此功能也适用于换行符.

Visualforce页面javascript:

var jsSafeText = "{!JSENCODE(mergeField)}";
Run Code Online (Sandbox Code Playgroud)


Jer*_*oss 5

它之所以被破坏是因为 JavaScript 不允许在字符串中出现文字换行符。这可能会修复它,同时允许换行:

public String getDeliveryRequirements() { 
    return shippingAddress.Delivery_Requirements__c.replace('\r\n', '\\r\\n');
}
Run Code Online (Sandbox Code Playgroud)

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

if('{!DeliveryRequirements}'.length > 0){
    leftOver -= '{!DeliveryRequirements}'.length;
}     
Run Code Online (Sandbox Code Playgroud)

更新:

manubkk的答案更好。但我认为正确的 JavaScript 语法是:

var deliveryRequirements = "{!JSENCODE(shippingAddress.Delivery_Requirements__c)}";
Run Code Online (Sandbox Code Playgroud)