Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Internet Explorer:编辑文本区域后如何避免额外的回车?_Javascript_Jquery_Css_Internet Explorer - Fatal编程技术网

Javascript Internet Explorer:编辑文本区域后如何避免额外的回车?

Javascript Internet Explorer:编辑文本区域后如何避免额外的回车?,javascript,jquery,css,internet-explorer,Javascript,Jquery,Css,Internet Explorer,我们在Internet Explorer中有一个多行文本区 如果我们在下一次之后检查它的内容,那么一切都是正确的(textarea中没有额外的回车): 但如果我们将插入符号设置为第二行的开始位置(在Internet Explorer中,而不是在代码中),并按tab键,则会有一个额外的回车字符(在下面的keydown键上有一个字符串转储): 这是一个问题,因为其他浏览器不插入额外的回车符 您知道如何在Internet Explorer中防止这种情况发生吗?在CSS或Javascript的帮助下。你

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

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

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

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


您知道如何在Internet Explorer中防止这种情况发生吗?在CSS或Javascript的帮助下。

你无法阻止它,而且你可能无论如何也不应该阻止它。尽管IE和其他浏览器在报告
元素值的方式上有所不同,但在提交元素周围的表单时,所有浏览器实际上都会在值中包含“\r\n”作为所有硬线分隔符。换句话说,即使Firefox报告换行符只包含“\n”,它实际上是在骗你——当表单发布时,值也会包含“\r”


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

我最好的建议是调整您对问题的思考方式

如前所述,没有通用的换行符。一些操作系统使用
\n
,其他操作系统使用
\r\n
,还有一些操作系统使用
\r


HTTP协议将
\r\n
指定为标题之间应使用的换行符,因此每个浏览器(以某种方式)都必须将换行符视为
\r\n
。如果要使用换行符,只需使用
\r\n
。这样你就不会那么头疼了。

你能做的就是接管tab键并用你自己的选择替换它:

有关解决方案,请参见此处:


回车的确切问题是什么?我想处理用户在textarea中按tab字符时的情况。如果使用Internet Explorer,则会出现一个问题(下一个答案无法正常工作):我不太明白Tab与
\r
的关系。您可以在IE中进行测试:将插入符号设置为新行的零索引并键入Tab。好的,非常感谢您提供的信息。我对你的答案投了赞成票。谢谢你。对不起,问题不是关于如何处理tab键。@Buh-Buh-是的。。我会尽量不再过度思考……;)@塞扎克-你是对的,这不是问题所在。但是,它确实为您的问题提供了一个解决方案。@Dementric OK,如果您这样认为的话。我对你的答案投了赞成票。乍一看,你似乎没有意识到问题。我以后再看你的决定。谢谢。如果问题是制表符插入新行字符,那么接管制表符行为并删除新行字符是合乎逻辑的。好的,问题是你刚才提到的。
document.getElementById( 'text-area' ).value = "Hello,\nWorld!";
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]='!'