Internet Explorer:如何在编辑Textarea后转义额外的回车?

ser*_*ach 5 javascript css jquery internet-explorer

我们在Internet Explorer中有一个多行文本区域.

如果我们在下一个之后检查它的内容,那么一切都是正确的(textarea中没有额外的回车):

document.getElementById( 'text-area' ).value = "Hello,\nWorld!";
Run Code Online (Sandbox Code Playgroud)

但是如果我们将插入符号设置为第二行的起始位置(在Internet Explorer中,而不是在代码中)并按Tab键,则会有一个额外的字符串字符(下面的keydown上有一个字符串转储):

value[0]='H'
value[1]='e'
value[2]='l'
value[3]='l'
value[4]='o'
value[5]=','
value[6]='\r'
value[7]='\n'
value[8]='W'
value[9]='o'
value[10]='r'
value[11]='l'
value[12]='d'
value[13]='!'
Run Code Online (Sandbox Code Playgroud)

这是一个问题,因为其他浏览器不会插入额外的回车.

你知道如何在Internet Explorer中阻止这种情况吗?借助CSSJavascript.

Poi*_*nty 8

你不能阻止它,你可能不应该.尽管IE和其他浏览器报告<textarea>元素值的方式不同,但是当提交元素周围的表单时,所有浏览器实际上都包含"\ r \n"表示值中的所有硬换行符.换句话说,即使Firefox报告的换行符只包含"\n",但它实际上对你说谎 - 当表单发布时,值也会出现"\ r \n".

出于某种原因,jQuery通过剥离"\ r"字符来规范浏览器的行为,这当然是错误的.这意味着当您尝试计算字符(如Stackoverflow注释框)时,您必须考虑到每个单个"\n"字符实际上代表服务器上的两个字符这一事实.因此,您必须在服务器上删除"\ r",或者更好地在客户端验证代码中对其进行说明.


riw*_*alk 5

我最好的建议是你调整你对这个问题的思考方式.

正如这里提到的,没有通用的换行符.某些操作系统使用\n,其他人使用\r\n,还有其他操作系统使用\r.

HTTP协议指定\r\n应在标头之间使用的换行符,因此每个浏览器必须(以某种方式)将换行视为\r\n.如果您想使用换行符,请使用\r\n.这样你会有更少的头痛.