HTMLTextAreaElement
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
HTMLTextAreaElement
インターフェイスは、 <textarea>
要素のレイアウトや表示を操作するための特別なプロパティやメソッドを提供します。
インスタンスプロパティ
親インターフェイスである HTMLElement
から継承したプロパティもあります。
autocapitalize
-
文字列で、この要素がユーザーの入力を大文字化する動作を表します。有効な値は
none
,off
,characters
,words
,sentences
です。 autocomplete
-
文字列で、この要素の
autocomplete
属性を表しいます。 cols
-
数値で、この要素の
cols
属性を表します。これはテキストエリアの表示上の幅を示します。 defaultValue
-
文字列で、このコントロールの既定値を表します。
Node.textContent
プロパティのように動作します。 dirName
-
文字列で、この要素の書字方向を表します。
disabled
-
論理値で、この要素の
disabled
属性を表します。これは、このコントロールが操作できない状態を示します。 form
読取専用-
親フォーム要素への参照を返します。この要素がフォーム要素配下にない場合、任意の
<form>
要素のid
属性もしくはnull
値になります。 labels
読取専用maxLength
-
数値で、この要素の
maxlength
属性を表します。これはユーザーが入力できる最大文字数を示します。この制約は値が変更されたときのみ評価されます。 minLength
-
数値で、この要素の
minlength
属性を表します。これはユーザーが入力できる最小文字数を示します。この制約は値が変更されたときのみ評価されます。 name
-
文字列で、この要素の
name
属性を表します。このコントロールの名前が入ります。 placeholder
-
文字列で、この要素の
placeholder
属性を表します。これは利用者がこのコントロールに入力するに当たっての助言が入ります。 readOnly
-
論理値で、この要素の
readonly
属性を表します。ユーザーがこのコントロールの値を変更できないことを示します。 required
-
論理値で、この要素の
required
属性を表します。これはユーザーがフォームを送信する前に値を指定しなければならないことを示します。 rows
-
数値で、この要素の
rows
属性を表します。このコントロールに表示できるテキストの行数を示します。 selectionDirection
-
文字列で、選択が行われた方向を表します。これは選択が現在のロケールで先頭から末尾の方向に行われた場合は
forward
、逆方向ならばbackward
です。方向が不明であればnone
になることもあります。 selectionEnd
-
数値で、選択中のテキストの終了位置を表します。テキストが選択されていない場合は、入力カーソルの次の文字の位置が入ります。値を設定すると、コントロールは
setSelectionRange()
がこの値を第 2 引数として、selectionStart
を第 1 引数として呼び出されたかのように動作します。 selectionStart
-
数値で、選択中のテキストの開始位置を表します。テキストが選択されていない場合は、入力カーソルの次の文字の位置が入ります。値を設定すると、コントロールは
setSelectionRange()
がこの値を第1引数として、selectionEnd
を第 2 引数として呼び出されたかのように動作します。 textLength
読取専用-
このコントロールの
value
のコードポイント数を返します。value.length
値を読むのと同じです。 type
読取専用-
文字列
textarea
を返します。 validationMessage
読取専用-
コントロールが満たさない検証制約(ある場合)を記述したローカライズされたメッセージを返します。コントロールが制約検証の候補でない(
willValidate
がfalse
の)場合、または制約を満たしている場合、これは空の文字列となります。 validity
読取専用-
この要素の検証の状態を返します。
value
-
このコントロール内の生の値を表します。
willValidate
読取専用-
この要素が制約検証の対象となるかどうかを返します。何か制約検証を妨げる条件があれば
false
となります。これにはreadOnly
やdisabled
プロパティの値がtrue
である場合も含みます。 wrap
-
文字列で、
wrap
属性を表します。このコントロールでのテキストの折り返し方法を示します。
インスタンスメソッド
親インターフェイスである HTMLElement
から継承したメソッドもあります。
checkValidity()
-
この要素が制約検証の対象であり、制約を満たしていない場合は
false
を返します。この場合、キャンセル可能なinvalid
イベントもコントロール上に発生します。このコントロールが制約検証の対象でない場合や、制約を満たしている場合はtrue
を返します。 reportValidity()
-
このメソッドは、この要素に制約の問題がもしあれば、ユーザーに報告します。問題があれば、キャンセル可能な
invalid
イベントを発生させ、false
を返します。問題がなければ、true
を返します。 select()
-
このコントロールの内容を選択します。
setCustomValidity()
-
この要素に独自の検証メッセージを設定します。このメッセージが空文字列でない場合は、要素は独自の検証エラーに陥っており、検証が成功しません。
setRangeText()
-
この要素のテキストのある範囲を、新しいテキストで置き換えます。
setSelectionRange()
-
要素のテキストのある範囲を選択します(ただし、フォーカスを与えません)。
イベント
親インターフェイスである HTMLElement
から継承したイベントもあります。
これらのイベントを待ち受けするには addEventListener()
を使用するか、イベントリスナーをこのインターフェイスの onイベント名
プロパティに代入するかしてください。
select
イベント-
一部のテキストが選択されたときに発行されます。
selectionchange
イベント Experimental-
<textarea>
要素のテキスト選択範囲が変更されたときに発行されます。
例
自動拡張するテキストエリアの例
入力していくとテキストエリアが自動拡張するようにします。
JavaScript
function autoGrow(oField) {
if (oField.scrollHeight > oField.clientHeight) {
oField.style.height = `${oField.scrollHeight}px`;
}
}
CSS
textarea.noscrollbars {
overflow: hidden;
width: 300px;
height: 100px;
}
HTML
<form>
<fieldset>
<legend>あなたのコメント</legend>
<p><textarea class="noscrollbars" onkeyup="autoGrow(this);"></textarea></p>
<p><input type="submit" value="送信" /></p>
</fieldset>
</form>
HTML タグを挿入する例
いくつかの HTML タグや、顔文字や、カスタムテキストをテキストエリアに挿入します。
JavaScript
function insert(startTag, endTag) {
const textArea = document.myForm.myTxtArea;
const selectionStart = textArea.selectionStart;
const selectionEnd = textArea.selectionEnd;
const oldText = textArea.value;
const prefix = oldText.substring(0, selectionStart);
const inserted =
startTag + oldText.substring(selectionStart, selectionEnd) + endTag;
const suffix = oldText.substring(selectionEnd);
textArea.value = `${prefix}${inserted}${suffix}`;
const newSelectionStart = selectionStart + startTag.length;
const newSelectionEnd = selectionEnd + startTag.length;
textArea.setSelectionRange(newSelectionStart, newSelectionEnd);
textArea.focus();
}
function insertURL() {
const newURL = prompt("リンクの完全な URL を入力してください");
if (newURL) {
insert(`<a href="${newURL}">`, "</a>");
} else {
document.myForm.myTxtArea.focus();
}
}
const strong = document.querySelector("#format-strong");
const em = document.querySelector("#format-em");
const link = document.querySelector("#format-link");
const code = document.querySelector("#format-code");
strong.addEventListener("click", (e) => insert("<strong>", "</strong>"));
em.addEventListener("click", (e) => insert("<em>", "</em>"));
link.addEventListener("click", (e) => insertURL());
code.addEventListener("click", (e) => insert("\n<code>\n", "\n</code>\n"));
CSS
内部の span をリンクのように動作させるよう装飾する CSS です。
.intLink {
cursor: pointer;
text-decoration: underline;
color: #0000ff;
}
HTML:
<form name="myForm">
<p>
[
<span class="intLink" id="format-strong"><strong>Bold</strong></span> |
<span class="intLink" id="format-em"><em>Italic</em></span> |
<span class="intLink" id="format-link">URL</span> |
<span class="intLink" id="format-code">code</span> ]
</p>
<p>
<textarea name="myTxtArea" rows="10" cols="50">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut facilisis, arcu vitae adipiscing placerat, nisl lectus accumsan nisi, vitae iaculis sem neque vel lectus. Praesent tristique commodo lorem quis fringilla. Sed ac tellus eros. Sed consectetur eleifend felis vitae luctus. Praesent sagittis, est eget bibendum tincidunt, ligula diam tincidunt augue, a fermentum odio velit eget mi. Phasellus mattis, elit id fringilla semper, orci magna cursus ligula, non venenatis lacus augue sit amet dui. Pellentesque lacinia odio id nisi pulvinar commodo tempus at odio. Ut consectetur eros porttitor nunc mollis ultrices. Aenean porttitor, purus sollicitudin viverra auctor, neque erat blandit sapien, sit amet tincidunt massa mi ac nibh. Proin nibh sem, bibendum ut placerat nec, cursus et lacus. Phasellus vel augue turpis. Nunc eu mauris eu leo blandit mollis interdum eget lorem.
</textarea>
</p>
</form>
長さと行数の制限の例
1 行あたりの最大文字数と最大行数のあるテキストエリアを作成します。
最初に、テキストフィールドと入力時のキーイベントを取り、何れかの制限に達したかどうかを判断する関数を作成します。判断に達していなければ、そのキーを返します。
function checkRows(oField, oKeyEvent) {
let nKey = (
oKeyEvent ||
/* old IE */ window.event || /* check is not supported! */ { keyCode: 38 }
).keyCode,
// 行の最大文字数をここに入力
nCols = 30,
// 最大行数をここに入力
nRows = 5,
nSelS = oField.selectionStart,
nSelE = oField.selectionEnd,
sVal = oField.value,
nLen = sVal.length,
nBackward = nSelS >= nCols ? nSelS - nCols : 0,
nDeltaForw =
sVal
.substring(nBackward, nSelS)
.search(new RegExp(`\\n(?!.{0,${String(nCols - 2)}}\\n)`)) + 1,
nRowStart = nBackward + nDeltaForw,
aReturns = (
sVal.substring(0, nSelS) + sVal.substring(nSelE, sVal.length)
).match(/\n/g),
nRowEnd = nSelE + nRowStart + nCols - nSelS,
sRow =
sVal.substring(nRowStart, nSelS) +
sVal.substring(nSelE, nRowEnd > nLen ? nLen : nRowEnd),
bKeepCols =
nKey === 13 ||
nLen + 1 < nCols ||
/\n/.test(sRow) ||
((nRowStart === 0 || nDeltaForw > 0 || nKey > 0) &&
(sRow.length < nCols ||
(nKey > 0 && (nLen === nRowEnd || sVal.charAt(nRowEnd) === "\n"))));
return (
(nKey !== 13 || (aReturns ? aReturns.length + 1 : 1) < nRows) &&
((nKey > 32 && nKey < 41) || bKeepCols)
);
}
HTML では、この関数を onkeypress
イベントでフックし、テキストエリアが貼り付けを受け付けないように設定します。
<form>
<p>
1行の文字数が固定されたテキストエリア:<br />
<textarea
cols="50"
rows="10"
onkeypress="return checkRows(this, event);"
onpaste="return false;"></textarea>
</p>
</form>
仕様書
Specification |
---|
HTML Standard # htmltextareaelement |
ブラウザーの互換性
BCD tables only load in the browser