1

テキストエリアで maxlength を使用し、JS を使用して残りの文字数を確認しています。単純な文字列を入力しようとすると

すなわち:

1234567890

繰り返し maxlength は完全に機能しますが、次のような文字列を入力しようとすると:

Welcome!

1. this is a test
2. this is a test
3. this is a test

hahaahahahahahahaahahahahahahahhahaahahahahahahahahahahahaaaaaaaaaaaaaasddddddddddasdaasdasdasd

残り6文字で停止しますが、FFでは完全に機能します。

maxlength がどのように機能するかについていくつかの調査を試みていましたが、成功しなかったので、なぜ maxlength がクロムで完全に機能しないのか疑問に思っていました。入力されたスペースと特殊文字が原因でしょうか?

ありがとうございました

4

1 に答える 1

5

この問題は、次のような単純なコードを使用して実証できます。

<textarea maxlength=5 rows=2 cols=10></textarea>

Firefox では、たとえば「12」と入力して Enter キーを押し、「34」と入力すると、それ以上入力できなくなります。Chrome で同じことをしようとすると、「3」以降は入力できなくなります。

Chrome は正しく動作するようですが、Firefox は動作しません。maxlengthfor 属性は HTML5のtextarea新規性であるため、正確さの最良の定義は、最新の W3C HTML5 ドラフトまたは最新の WHATWG HTML ドキュメントのいずれかであり、この問題 (および他のほとんどの問題) について同意しています。

W3C HTML5 定義textareaにより、値の改行はブラウザーによって CR LF (キャリッジ リターン、ラインフィード、つまり 2 つの制御文字) に正規化されます。したがって、「12」と入力して Enterm を押し、「3」と入力すると、改行が 2 文字としてカウントされるため、5 文字を入力したことになります。

スペースは文字としてカウントされ、特殊文字も同様です。W3C HTML5 ドラフトでは、いくつかの非常に特殊な文字、つまり Basic Multilingual Plane (BMP) 外の文字は非常に特殊です。長さは 16 ビット コード単位でカウントされるため、これらはそれぞれ 2 文字としてカウントされます。しかし、ほとんどの人は BMP 以外の文字を使用したことがありません。

于 2012-07-26T20:24:08.320 に答える