当字符串中遇到新行字符时,Javascript不在可视强制页面上工作

当字符串中遇到新行字符时,Javascript不在可视强制页面上工作,javascript,salesforce,visualforce,Javascript,Salesforce,Visualforce,所以我注意到我的VisualForce页面上的一段Javascript在某些情况下起作用,而在其他情况下则不起作用。JS在一个自定义对象的textArea字段上执行一些操作。我意识到只要textArea字段中有新行或回车符(\n和\r),JS就会中断 因此,我最终在页面控制器中使用了replaceAll()方法,并在页面加载时从textArea字段中删除了所有这些字符。当它到达JS时,它是一个合法的字符串 在VF页面上: <script language="JavaScript">

所以我注意到我的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>
发布这篇文章是为了提醒那些遇到JS为某些记录工作而不是为其他记录工作的人


如果您知道它为什么会中断,请告诉我。

它正在中断,因为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)}";

它正在中断,因为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)}";

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

Visualforce页面javascript:

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

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

Visualforce页面javascript:

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

语法类似于+Jeremy Ross Sais:var deliveryRequirements=“{!JSENCODE(shippingAddress.Delivery_Requirements_____c)}”;语法类似于+Jeremy Ross Sais:var deliveryRequirements=“{!JSENCODE(shippingAddress.Delivery_Requirements_____c)}”;