在 JavaScript 中使用带有换行符的 ColdFusion 变量

Using ColdFusion variable with line breaks in JavaScript

我有一个接受换行符的文本区域。该文本区域的内容保存在一个 coldfusion 变量中(我们称之为 #fieldVal#)。所以,我的变量内容看起来像

textline 1
textline 2

稍后,我在 JavaScript

中使用该变量
document.all.fieldName.value = "#fieldVal#";

然而,当JavaScript点击页面时,它看起来像这样:

document.all.fieldName.value = "textline 1
textline 2";

脚本中断,因为第一行没有以分号结尾。

我尝试为 ColdFusion 文本设置一个 JavaScript 变量,然后执行 replace(),但我仍然遇到同样的问题,该行未正确结束。

我想我遗漏了一些明显的东西,但我只是没有看到它。有人可以告诉我我在这里缺少什么吗?

选项 1

document.all.fieldName.value = "#Replace(trim(fieldVal), chr(10) & chr(13), ' ', 'ALL')#"; 

方案二(有可能这也是同样的问题。)

尝试使用 ToScript()

ToScript(fieldVal, valueVar)

Toscript 使用 coldfusion 变量值初始化一个变量,您可以像使用任何 JS 全局变量一样使用。

document.all.fieldName.value = valueVar;

选项3(如果你需要HTML形式)

使用 coldfusion 函数 ParagraphFormat() 将换行符更改为 <br/>

我偶然发现了一个有效的代码片段。有点...复杂,但它有效。

document.all.fieldName.value = "#Replace(Replace(URLDecode(Replace(Replace(URLEncodedFormat(fieldVal), "%0D", " ", "ALL"), "%0A", "", "ALL")),CHR(34),"", "ALL"),CHR(39),"", "ALL")#"

使用 JSStringFormat() 函数。它旨在转义 JavaScript

中的元字符

Escapes special JavaScript characters, such as single-quotation mark, double-quotation mark, and newline.

https://wikidocs.adobe.com/wiki/display/coldfusionen/JSStringFormat

document.all.fieldName.value = "#JSStringFormat( fieldVal )#";

如果您使用的是 ColdFusion 10+ 或 Lucee Server,请使用 EncodeForJavaScript()

https://wikidocs.adobe.com/wiki/display/coldfusionen/EncodeForJavaScript