我将数据从HTML-Text-Areas发送到JSP,然后将它们插入到数据库中。
如果重新加载页面,则将数据库记录放在此Text-Area和JavaScript变量中。 该变量用于确定用户是否更改了文本区域的值。
JavaScript中的测试程序非常基础,大部分时间都可以使用:
if(orig_info != document.getElementById('info').value)
//Something has changed!
现在,在某些情况下,即使没有任何更改,也会调用更改过程。我用firebug检查了文本区域和变量,它是相同的文本。 这很奇怪,所以我读了两个字符串的长度:
document.getElementById('info').value.length 231
orig_info.length 235
然而,我无法看到4个字符的任何差异所以我做了一个简单的输出:字母的数字,字母,Unicode16并得到了:
第一个是文本区域:document.getElementById('info').value
,第二个是变量orig_bemerkung
61 |. |\u002E| 61 |. |\u002E
62 | |\u000A| 62 | |\u000D
63 |1 |\u0031| 63 | |\u000A
64 |1 |\u0031
现在,我发现\u000D
和\u000A
存在旧问题。
我不知道如何解决这个问题。在服务器上,我编写了以下代码:
ret.append("\ndocument.getElementById('info').innerHTML='").append(StringEscapeUtils.escapeJavaScript(this.getInfo())).append("';");
ret.append("orig_info = '").append(StringEscapeUtils.escapeJavaScript(this.getInfo())).append("';\n");
return ret.toString();
即使两次使用完全相同的代码,Text-Area也会处理与变量不同的内容。
我怎样才能解决orig_info
等于document.getElementById('info').value
的问题,即使有人之前在文本区使用了Enter?
答案 0 :(得分:2)
HTML表单帖子的规则明确规定必须使用CR-LF对传输<textarea>
值,以便用户键入硬换行符。浏览器(我认为所有这些,甚至更新的IE版本)莫名其妙地将<textarea>
值返回给JavaScript代码,仅使用LF表示硬断行。
您可以自行转换价值来解释这种奇怪现象。它是这样的:
function realValue( textareaValue ) {
textareaValue = textareaValue.replace(/([^\r]|^)\n/g, "$1\r\n");
return textareaValue;
}
// ...
var xmitValue = realValue( someTextArea.value );