Textareasはまだブラウザ間で完全に同期していません。2つの大きな問題に気づきました:キャリッジリターンと文字エンコード
キャリッジリターン
デフォルトでは、2文字として操作されます\ r \ n(Windowsスタイル)。
問題は、ChromeとFirefoxがそれを1文字としてカウントすることです。また、それを選択して、スペースとして選択された不可視の文字があることを確認することもできます。
回避策はここにあります:
var length = $.trim($(this).val()).split(" ").join("").split('\n').join('').length;
Jqueryの単語は、ユーザーが改行したときにカウントされます
一方、Internet Explorerは、2文字としてカウントします。
それらの表現は:
バイナリ: 00001101 00001010
16進数: 0D0A
、およびはUTF-8では2文字として表され、maxlengthは2文字としてカウントされます。
HTMLエンティティは
1)javascriptコードから作成:
<textarea id='txa'></textarea>
document.getElementById("txa").value = String.fromCharCode(13, 10);
2)textareaのコンテンツから解析:
Ansiコード:&#13;&#10;
<textarea>Line one. Line two.</textarea>
3)キーボードから挿入Enterキー
4)テキストボックスの複数行コンテンツとして定義されます
<textarea>Line one.
Line two.</textarea>
文字コード
textareaのような入力フィールドの文字エンコードは、ページの文字エンコードとは独立しています。これは、バイト数をカウントする場合に重要です。したがって、ページのANSIエンコーディング(1文字あたり1バイト)を定義するメタヘッダーがある場合でも、テキストボックスのコンテンツは1文字あたり2バイトのUTF-8です。
文字エンコードの回避策は次のとおりです。
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エンコーディングが失われます