15

これは、この質問から派生したものです: Chrome は、maxlength 属性を持つテキストエリアで文字数が間違っています


その質問では、実際には 2 つの ( )であるのに、 Javascript の改行は 1 文字で\r\nあることがわかりました。なぜですか?

テストフィドル: http://jsfiddle.net/maniator/E527z/

4

1 に答える 1

25

理由は不明ですが、jQuery は常に a の値に含まれるすべての改行を<textarea>1 文字に変換します。つまり、ブラウザーが\r\n改行のためにそれを与える場合、jQuery はそれが\nの戻り値にあることを確認します.val()。(実際には、理由はおそらく「不明」ではありません。IE は改行の長さを 2 文字として報告するため、おそらくブラウザ間で結果を正規化するためです。)

<textarea>Chrome と Firefox はどちらも、"maxlength" の目的でタグの長さを同じ方法でカウントします。

ただし、HTTP 仕様では、改行を として表すことを主張しています\r\n。したがって、jQuery、webkit、および Firefox はすべてこれを誤解しています。フィールドが投稿されると、webkit と Firefox は正しく改行を追加します!

要するに、サーバー側のコードでフィールド値の最大サイズが実際に固定されている場合、タグの「maxlength」<textarea>はほとんど役に立たないということです。

編集これは 2015 年でもまだ問題です - 少なくとも Chrome 45.0.2454 と IE 11.0.9600 では。

于 2012-04-05T15:07:55.333 に答える