[解決済み] オートリサイズによるテキストエリアの作成
2022-03-22 22:49:07
質問
がありました。
この件に関する別のスレッド
を試してみました。しかし、一つ問題があります。
textarea
は、コンテンツを削除しても縮小されません。正しいサイズに縮小する方法が見当たりません。
clientHeight
のフルサイズで戻ってきます。
textarea
であり、その内容ではありません。
そのページのコードは以下の通りです。
function FitToContent(id, maxHeight)
{
var text = id && id.style ? id : document.getElementById(id);
if ( !text )
return;
var adjustedHeight = text.clientHeight;
if ( !maxHeight || maxHeight > adjustedHeight )
{
adjustedHeight = Math.max(text.scrollHeight, adjustedHeight);
if ( maxHeight )
adjustedHeight = Math.min(maxHeight, adjustedHeight);
if ( adjustedHeight > text.clientHeight )
text.style.height = adjustedHeight + "px";
}
}
window.onload = function() {
document.getElementById("ta").onkeyup = function() {
FitToContent( this, 500 )
};
}
解決方法は?
これは私のために動作します(Firefox 3.6/4.0とChrome 10/11)。
var observe;
if (window.attachEvent) {
observe = function (element, event, handler) {
element.attachEvent('on'+event, handler);
};
}
else {
observe = function (element, event, handler) {
element.addEventListener(event, handler, false);
};
}
function init () {
var text = document.getElementById('text');
function resize () {
text.style.height = 'auto';
text.style.height = text.scrollHeight+'px';
}
/* 0-timeout to get the already changed text */
function delayedResize () {
window.setTimeout(resize, 0);
}
observe(text, 'change', resize);
observe(text, 'cut', delayedResize);
observe(text, 'paste', delayedResize);
observe(text, 'drop', delayedResize);
observe(text, 'keydown', delayedResize);
text.focus();
text.select();
resize();
}
textarea {
border: 0 none white;
overflow: hidden;
padding: 0;
outline: none;
background-color: #D0D0D0;
}
<body onload="init();">
<textarea rows="1" style="height:1em;" id="text"></textarea>
</body>
もしよろしければ
jsfiddle
1行から始まり、必要な分だけ成長します。一本の
textarea
しかし、私は、このような多数の
textarea
があります(通常、大きなテキスト文書にある行数と同じくらい)。その場合、本当に遅いです。(Firefoxでは、めちゃくちゃ遅いです。)だから、私は本当に純粋なCSSを使用するアプローチを望んでいます。これは
contenteditable
しかし、私はそれをプレーンテキストのみにしたいのです。
関連
-
Vueの要素ツリーコントロールに破線を追加する説明
-
vueにおけるfilterの適用シーンについて解説します。
-
HTML5 LocalStorage ローカルストレージとセッションストレージの使用法
-
[解決済み] textareaのresizableプロパティを無効にするにはどうしたらよいですか?
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み] JavaScriptで複数行の文字列を作成する
-
[解決済み] div' コンテナに合わせて画像を自動リサイズするにはどうしたらいいですか?
-
[解決済み】HTML5入力のプレースホルダの色をCSSで変更する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
JSアレイループと効率解析の比較
-
元のイベントが実行されなかった後に要素を追加するためのjQueryソリューション
-
VUEグローバルフィルターの概念と留意点、基本的な使い方
-
Vueのイベント処理とイベントモディファイアの解説
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み】Node.js Error: Cannot find module express
-
[解決済み】エラー。Ionic使用中にモジュール '../lib/utils/unsupported.js' が見つかりませんでした。
-
JSクリックイベント - Uncaught TypeError: プロパティ 'onclick' に null を設定できません。
-
[解決済み】Textarea Auto height [重複]。
-
[解決済み] コンテンツの長さに応じてサイズを変更するTextarea [重複]。