0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

textareaの高さを自動調整する方法

Posted at

実現したいこと

▪️ ページ表示時に、textareaの高さを自動で入力内容に合わせる

▪️ 入力中もリアルタイムで高さを調整する

▪️ create画面でもedit画面でも、バリデーションエラー後のold値でも対応可能にする

コード

HTML側

<textarea oninput="autoResize(this)">既に入力済みのテキスト</textarea>

JavaScript側

<script>
document.addEventListener('DOMContentLoaded', function () {
    // ----- ページ表示時(1回目)の高さ調整
    document.querySelectorAll('textarea').forEach(function (textarea) {
        autoResize(textarea); // 既存値がある場合に高さを調整
    });
});

// ----- 入力時(2回目)高さを調整する関数
function autoResize(el) {
    el.style.height = 'auto'; // 一旦リセット
    el.style.height = el.scrollHeight + 'px'; // 中身に応じて高さ設定
}
window.autoResize = autoResize; // oninputなどHTMLから呼び出せるようにする
</script>

解説

1.ページ表示時(1回目)

DOMContentLoaded 内で querySelectorAll('textarea') を回して autoResize() を実行

これにより edit画面の既存値 や create画面のold値 でも、表示時点で高さが合う

2.入力中(2回目以降)

oninput="autoResize(this)" によりリアルタイム調整

3.create / edit / old 対応

old('description', $task->description ?? '') と書くことで、

create画面 → バリデーションエラー後のold値が反映

edit画面 → DBの既存値が反映

どちらも高さ自動調整が効く

動作イメージ例

▪️ edit画面で長文が入っている → 開いた瞬間に高さが自動で伸びる
▪️ バリデーションエラーで戻った時 → 入力済みの高さが維持される

editページ表示時(&バリデーションエラー後ページ表示)
スクリーンショット 2025-08-12 18.55.17.png

編集後
スクリーンショット 2025-08-12 18.55.31.png

▪️ create画面で入力 → 入力しながら高さが伸びる
入力前
スクリーンショット 2025-08-12 18.52.09.png

入力後
スクリーンショット 2025-08-12 18.52.56.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?