我有一个接受换行符的文本区域。该文本区域的内容保存在coldfusion变量中(我们称之为#fieldVal#
)。所以,我的变量内容看起来像
textline 1
textline 2
稍后,我在JavaScript中使用该变量
document.all.fieldName.value = "#fieldVal#";
但是,当JavaScript点击页面时,它看起来像这样:
document.all.fieldName.value = "textline 1
textline 2";
并且脚本中断,因为第一行不以分号结尾。
我尝试将一个JavaScript变量设置为ColdFusion文本,然后执行replace()
,但我仍然遇到了相同的问题,并且该行未正确结束。
我想我错过了一些明显的东西,但我只是没有看到它。有人能告诉我我在这里缺少什么吗?
答案 0 :(得分:13)
使用JSStringFormat()函数。它旨在转义JavaScript中的元字符
转义特殊的JavaScript字符,例如单引号, 双引号和换行符。
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
答案 1 :(得分:1)
选项1
document.all.fieldName.value = "#Replace(trim(fieldVal), chr(10) & chr(13), ' ', 'ALL')#";
选项2 (也可能出现同样的问题。)
尝试使用ToScript()
ToScript(fieldVal, valueVar)
Toscript使用coldfusion变量值初始化变量,您可以使用任何JS全局变量。
document.all.fieldName.value = valueVar;
选项3 (如果您需要HTML格式)
使用coldfusion函数ParagraphFormat()
将换行符更改为<br/>
。
答案 2 :(得分:-1)
我偶然发现了一个有效的代码片段。它有点......令人费解,但它确实有效。
document.all.fieldName.value = "#Replace(Replace(URLDecode(Replace(Replace(URLEncodedFormat(fieldVal), "%0D", " ", "ALL"), "%0A", "", "ALL")),CHR(34),"", "ALL"),CHR(39),"", "ALL")#"