<textarea>要素
Technical Summary
textarea要素は、複数行のplain textを編集するform controlです。要素の内容は初期値を表し、ユーザー操作やDOM APIによる現在値とは区別されます。
textareaはform-associated、labelable、listed、submittable、resettableな要素です。name、form、disabled、制約検証、labelとの関連付けがフォーム処理に関係します。
意味・category・content model
| 項目 | 内容 | 確認上の境界 |
|---|---|---|
| 意味 | 複数行のplain text edit control | HTMLとして解釈する編集領域ではない |
| category | flow、phrasing、interactive、listed、labelable、submittable、resettable、form-associated、palpable | フォームコントロール共通の仕組みとlabel・送信・リセットが関係する |
| content model | Text | 要素の内容は初期値であり、子孫要素を組み立てるHTML markupではない |
| tag omission | 開始タグ・終了タグとも省略不可 | 空の入力欄でも終了タグを省略しない |
ページの本文を編集するリッチテキスト領域とは異なり、textareaが扱うのはplain textです。表示上の行の折り返しと、フォーム送信時の値に追加される改行は同じとは限りません。
初期値・raw value・現在値
要素の内容はdefault valueです。ユーザーが入力するとraw valueが変わり、現在のAPI valueはtextarea.valueで取得します。textareaにはinputのような初期値用のvalue content attributeはありません。
<textarea id="note" name="note" rows="3">HTMLに書いた初期値</textarea>
<script>
const note = document.querySelector('#note');
note.value; // 現在値
note.defaultValue; // リセット時の基準値
</script>
| 概念 | 意味 | 主な利用箇所 |
|---|---|---|
| raw value | textareaに設定された値。正規化前の値 | 仕様上の内部状態、ユーザー編集 |
| API value | 改行をLFに正規化した値 | value、textLength、minlength、maxlength |
| form value | API valueに、必要ならwrap="hard"の折り返し改行を加えた値 | フォーム送信と関連する処理 |
ユーザー操作で値が変更されるとdirty value flagが立ちます。dirty value flagが立った後は、子テキストをDOMから変更しても現在値が同じように更新されるとは限りません。フォームリセットでは、dirty value flagが戻り、子テキストを基準に値が再設定されます。
編集可能性・readonly・disabled
textareaは、disabledでもreadonlyでもない場合にmutableです。mutableなとき、ユーザーエージェントは文字やLFの改行を編集できるようにします。
| 状態 | 編集 | constraint validation | フォーム送信 |
|---|---|---|---|
| 通常 | 編集できる | requiredなどの条件に参加する | nameなどの条件を満たせば対象になる |
readonly | ユーザーは編集できない | constraint validationから除外される | disabledとは異なり、送信対象から自動的に除外されるわけではない |
disabled | 操作できない | constraint validationから除外される | 値はフォーム送信の対象にならない |
readonlyとdisabledは見た目を変えるための同義語ではありません。編集の可否、検証への参加、送信対象かどうかを別々に確認します。
主なcontent attributes
| 属性 | 意味 | 条件・注意点 |
|---|---|---|
name | 送信値とform.elements APIで使う名前 | 名前がない場合、通常のフォーム送信entryには関係しない |
form | form ownerを明示する | 同じdocument内のformと関連付ける |
required | 空でない値を要求する | mutableで、form valueが空文字列ならmissingとなる |
minlength / maxlength | 値の長さの下限・上限 | 改行を正規化したAPI valueの長さが関係する |
placeholder | 値が空のときの短い入力ヒント | labelの代わりにはならない |
rows / cols | 表示する行数・1行の文字幅の目安 | rowsの既定値は2、colsの既定値は20。最終的な表示はCSSやUA実装にも依存する |
wrap | 送信値の折り返し方法 | softは送信時に折り返し改行を加えず、hardは加える。hardではcolsが必要 |
dirname | 入力値のdirectionalityを送信する名前 | 通常のvalueとは別のentryに関係する |
autocomplete | autofillのヒント | form control共通のautocomplete処理と確認する |
readonly / disabled | 編集・操作・検証・送信の状態を変える | readonlyとdisabledの帰結を混同しない |
改行の正規化とwrap
textareaの値には、目的に応じて3つの見方があります。raw valueは正規化されませんが、API valueでは改行がLF(U+000A)に正規化されます。フォーム送信で使われるvalueには、wrap="hard"の条件に応じて折り返し改行が追加されます。
| wrapの状態 | 表示上の折り返し | 送信値 |
|---|---|---|
soft(既定) | 表示上は折り返されうる | 表示上の折り返しだけでは改行を追加しない |
hard | colsを基準に折り返されうる | ユーザーエージェントが折り返し改行を追加する |
このため、画面で見えている行数と送信された文字列の改行位置を同一視できません。サーバー側で改行を処理する場合は、実際に受け取った値とwrapの条件を確認します。
フォーム送信と制約検証
textareaはform-associatedなsubmittable elementです。form ownerがあり、disabledでなく、送信に必要なnameなどの条件を満たす場合、textareaのform valueがentry listに関係します。
<form action="/messages" method="post">
<label for="body">本文</label>
<textarea id="body" name="body" required minlength="10"></textarea>
<button type="submit">送信</button>
</form>
requiredが指定され、textareaがmutableで、valueが空ならconstraint validationでmissingになります。minlengthとmaxlengthは値の長さ、readonlyやdisabledは検証参加の可否に影響します。ブラウザーの検証はサーバー側検証の代替ではありません。
DOM Interface
textarea要素はHTMLTextAreaElementとして公開されます。
| API | 概要 |
|---|---|
value | 現在のAPI valueを読む・設定する。設定時はraw valueとdirty value flagに影響する |
defaultValue | 子テキストを基準とする初期値を読む・設定する |
textLength | API valueの長さを読む |
selectionStart / selectionEnd | 選択範囲の位置を読む・設定する |
setSelectionRange() | 選択範囲とdirectionを設定する |
setRangeText() | 選択範囲のテキストを置換する |
form / labels | form ownerと関連labelを読む |
willValidate / validity | constraint validationへの参加と状態を読む |
checkValidity() / reportValidity() | 制約検証を実行・報告する |
cols / rows / wrap | 表示と送信時の折り返し条件を扱う |
ユーザーによるraw valueの変更ではinputイベントが発生します。イベント処理で値を読む場合も、raw value、API value、送信時のvalueの境界を目的に応じて確認します。
Fact / Evidence(主張 / 根拠)
主要Factを、適用条件・確認状態・仕様上の根拠位置と対応付けています。ブラウザー実装やアクセシビリティツリーの観測は、仕様上の主張とは別に下のImplementation Evidenceへ分けています。
| 種別 | Fact / 主張 | 条件・範囲 | 状態 | 根拠 |
|---|---|---|---|---|
| SPEC | textareaは複数行のplain text edit controlで、要素の内容はdefault valueを表す。 | textarea elementの意味と初期状態。 | 確認済み | HTML Standard: the textarea element |
| SPEC | raw value、API value、form submissionで使うvalueは、改行とwrapの扱いが異なる。 | LF正規化とwrap="hard"の送信値。 | 確認済み | HTML Standard: value normalization |
| SPEC | ユーザー編集でdirty value flagが立ち、フォームリセットではdefault valueを基準に値が戻る。 | 初期値、DOM変更、ユーザー編集、reset algorithmの境界。 | 確認済み | HTML Standard: textarea reset algorithm |
| SPEC | requiredはmutableなtextareaの空valueをmissingとして扱い、readonlyはconstraint validationから除外する。 | required、mutable、readonly、constraint validation。 | 確認済み | HTML Standard: validation conditions |
| SPEC | textareaはform-associatedなsubmittable elementで、name、form、disabledが送信条件に関係する。 | form owner、entry list、disabled、フォーム関連API。 | 確認済み | HTML Standard: form control infrastructure |
| SPEC | HTML-AAMでは、通常のtextareaはtextbox roleとmultiline=trueに対応する。 | ネイティブ要素のaccessible role mapping。 | 確認済み | HTML-AAM: textarea |
Evidence
- HTML Standard: The textarea element — 意味、category、content model、属性、値、リセット、DOM interface
- HTML Standard: Form control infrastructure — form owner、disabled、constraint validation、フォーム送信共通基盤
- HTML Accessibility API Mappings: textarea — textbox role、multiline state、accessible nameと状態のmapping
- WPT: textarea element tests — textareaの値、属性、フォーム連携に関係するテスト群
- WPT: input events and textarea editing — 編集操作とinput eventに関係するテスト例
Implementation Evidence
仕様上の主張とは別に、ブラウザー実装・WPT・アクセシビリティ観測を記録します。未実施の項目は確認済みとは扱いません。
実測fixture / 環境: <form id="evidence-form" method="get">内に、初期値付きtextarea、空のrequired textarea、minlength・maxlength、readonly、disabled、wrap="hard"、外部form owner、reset buttonを配置しました。Chrome 152.0.0.0(HeadlessChrome / Windows NT 10.0)で2026-09-13にDOM・ValidityState・FormDataを実測しています。
| 種別 | 再現確認の範囲 | 記録する条件 | 状態 |
|---|---|---|---|
| IMPL | 初期値、value、defaultValue、dirty value flag、DOM変更、form reset | 実測結果(Chrome 152.0.0.0 / Windows NT 10.0 / 2026-09-13): 子テキスト由来の初期値はvalue・defaultValue・textContentが同じ。valueをEditedに変更してもdefaultValue・textContentは変わらず、resetで初期値に戻った | 確認済み |
| IMPL | required、minlength、maxlength、readonly、disabled、form owner、submission | 実測: 空のrequiredはvalid=false・valueMissing=true、値okでvalid。readonlyはwillValidate=false。disabled textareaはFormDataから除外され、外部form ownerのtextareaは含まれた。プログラムからの値設定ではtooShort・tooLongが立たず、ユーザー編集経路は未実施 | 未完了 |
| IMPL | 改行、rows、cols、wrap="soft" / hard | 実測: wrap="hard"・cols=4・値abcdefghijではFormDataの値がabcdef\nghijになった。表示上の折り返し、LF・CRLF差、cols変更は未実施 | 未完了 |
| WPT | textarea element、初期値・現在値、属性、selection、form submission、入力イベント | textarea element testsのうち、textarea-type.html、textarea-minlength.html、textarea-validity-valueMissing-inside-datalist.htmlを実行し、input events testも確認。2026-09-15 / Chrome 152.0.0.0 / Windows NT 10.0 / wpt.liveでtextarea選定テストは7/7 pass、input eventsは0/3 pass(action_sequence()未実装)。ディレクトリ内の残りのテストと他ブラウザーは未評価 | 部分実行(7/10 pass) |
| AAM | accessible name、textbox role、multiline state、required・readonly・disabled state | label付きtextareaと各状態をアクセシビリティツリーおよび支援技術で観測する。環境は実測後に登録する | 未実施 |
WPTの対応付けにはWPT repository、アクセシビリティの基準にはHTML-AAMを参照します。
Coverage / Open Issues
- 確認済みtextareaの意味、category、content model、初期値・現在値・defaultValue、主要属性、HTMLTextAreaElement APIの概要
- 確認済みrequired、minlength、maxlength、readonly、disabled、form owner、フォーム送信の主要な境界
- 確認済みraw value・API value・form value、LF正規化、wrapの基本的な関係
- 未完了form submission algorithm、entry list、dirname、encoding、formdata eventの全分岐
- 未完了wrap="hard"の折り返しアルゴリズム、改行・Unicode・文字数の実装差
- 未完了実装Evidence、複数ブラウザー、WPT実行、HTML-AAM全mapping、支援技術観測、互換性、歴史的変更、Expert-gap Review
このページは初期Coverageです。確認済みの範囲を示すものであり、textarea要素全体の検証完了、すべてのブラウザーで同じ値や表示になること、または支援技術で同じ結果になることを主張しません。
Related surface
初心者向けの複数行入力、label、初期値、フォーム送信はYugienのtextarea要素ページを参照してください。フォーム送信の共通処理はAtlasのform要素、labelとの関連付けはAtlasのlabel要素、他のフォームコントロールとの境界はinput要素、select要素、button要素でも確認できます。