文本区域在浏览器之间仍未完全同步。我注意到两个主要问题:回车和字符编码
回车
默认情况下被操作为 2 个字符\r\n(Windows 样式)。
问题是 Chrome 和 Firefox 会将其视为一个字符。您也可以选择它来观察有一个隐身字符被选为空格。
在这里可以找到一种解决方法:
var length = $.trim($(this).val()).split(" ").join("").split('\n').join('').length;
当用户键入换行符时,Jquery 字数计数
另一方面,Internet Explorer 会将其计为 2 个字符。
他们的代表是:
二进制: 00001101 00001010
十六进制: 0D0A
, 并以 UTF-8 表示为 2 个字符,maxlength 计为 2 个字符。
HTML 实体可以是
1)从javascript代码创建:
<textarea id='txa'></textarea>
document.getElementById("txa").value = String.fromCharCode(13, 10);
2)从textarea的内容解析:
Ansi 代码:
<textarea>Line one. Line two.</textarea>
3) 从键盘输入 Enter 键
4) 定义为文本框的多行内容
<textarea>Line one.
Line two.</textarea>
字符编码
像 textarea 这样的输入字段的字符编码独立于页面的字符编码。如果您打算计算字节数,这很重要。因此,如果您有一个元标头来定义页面的 ANSI 编码(每个字符 1 个字节),则文本框的内容仍然是 UTF-8,每个字符 2 个字节。
此处提供了字符编码的解决方法:
function htmlEncode(value){
// Create a in-memory div, set its inner text (which jQuery automatically encodes)
// Then grab the encoded contents back out. The div never exists on the page.
return $('<div/>').text(value).html();
}
function htmlDecode(value){
return $('<div/>').html(value).text();
}
从输入字段读取属性时 HTML 编码丢失