这是我问的previous question的扩展名。我遇到了一些其他问题。
我正在加载带有动态textarea框的表单。不要问为什么,但我需要使用JavaScript填充这些字段(必须处理AJAX的东西等)。为简化起见,我只想说我的textarea名称为“myTextarea”,我想填充请求参数“myRequestParam”。所以我想做一些像:
updateTextareaText("myTextarea", "${myRequestParameter}");
从我之前的问题,我发现这解决了一些问题:
updateTextareaText("myTextarea", unescape('<c:out value="${myRequestParam}" />'));
我为updateTextareaText
尝试了许多不同的实现,但似乎没有任何效果。我需要处理换行符和特殊字符。
尝试#1
function updateTextareaText(textareaElementName, newText) {
var textareaBox = document.getElementsByName(textareaElementName)[0];
textareaBox.innerHTML = newText;
}
尝试#2
function updateTextareaText(textareaElementName, newText) {
var textareaBox = document.getElementsByName(textareaElementName)[0];
textareaBox.value = newText;
}
尝试#3
function updateTextareaText(textareaElementName, newText) {
var textareaBox = document.getElementsByName(textareaElementName)[0];
var existingNodes = textareaBox.childNodes;
if (existingNodes.length > 0) {
textareaBox.removeChild(existingNodes[0]);
}
var newTextNode = document.createTextNode(newText);
textareaBox.appendChild(newTextNode);
}
以上所有松散的换行符和/或显示一些特殊字符作为其转义值。我一直在使用以下myRequestParam
值进行测试:
Test
Newline and Special `~!@#$%^&*()_+-={}|[]\:";'<>?,./
有谁知道处理所有不同情况的正确方法?作为旁注,myRequestParam
值将从数据库填充,并返回换行符\r\n
,我已将其作为%0A
转义,但我不确定这是否应该是这样做。 JavaScript最初不会处理\r\n
(它会抱怨未终止的字符串等)。
答案 0 :(得分:1)
请参阅我提交的another question。诀窍是删除背面和整个escape
和<c:out>
内容的转义,而是使用利用StringEscapeUtils.escapeJavaScript
的EL函数。
答案 1 :(得分:0)
尝试jQuery:
$('#textAreaId').val('MyValue');
或
$('#textAreaId').html('MyValue');
猜猜它可以解决问题。
答案 2 :(得分:0)
在有限的本地尝试中,它使用了#2功能(仅尝试过那个功能)。
标题:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
javascript:updateTextareaText(“txtarea”,“Test \ n \ nNewline and Special` \〜!@#$%\ ^ \&amp; *()_ + - = {} | [] \:\”;' &LT;&GT;?,// \näöüÄÖÜß“);
所以你得到的String可能没有被转义(\',\&amp;等等),在这种情况下,Commons Langs中的Apache的StringEscapeUtils会帮助(http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/StringEscapeUtils.html#escapeJavaScript%28java.lang.String%29)。
除此之外,你必须通过替换'with \'等来对这个javascript案例进行转换......不是很好。