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

时间:2011-06-20 14:44:20

标签: javascript jquery css internet-explorer

我们在Internet Explorer中有一个 multiline textarea

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

document.getElementById( 'text-area' ).value = "Hello,\nWorld!";

但是,如果我们将插入符号设置为第二行的开头位置(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]='!'

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

您知道如何在Internet Explorer中阻止此操作吗?借助 CSS Javascript

3 个答案:

答案 0 :(得分:8)

你不能阻止它,你可能不应该。尽管IE和其他浏览器在报告<textarea>元素值的方式上存在差异,但所有浏览器实际上都包含“\ r \ n”以用于所有硬换行符提交元素周围的表单时的值。换句话说,即使Firefox报告的换行符只包含“\ n”,但它实际上对你说谎 - 当表单发布时,值 也会有“\ r”。

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

答案 1 :(得分:5)

我最好的建议是你调整思考问题的方式。

正如前面提到的here,没有通用的换行符。某些操作系统使用\n,其他操作系统使用\r\n,还有其他操作系统使用\r

HTTP协议将\r\n指定为标题之间应使用的换行符,因此每个浏览器都必须(以某种方式)将换行符视为\r\n。如果您想使用换行符,只需使用\r\n即可。你会有更少的麻烦。

答案 2 :(得分:2)

你可以做的是接管tab键,然后用你自己的选择替换它:

请点击此处查看解决方案:

jQuery: How to capture the TAB keypress within a Textbox