やりたいこと:
幅と高さが文字数に応じて変動するテキストエリアに、親要素最下部(右端)まで入力したら文字数を制限して入力できなくする
概要:
・ダブルクリックでテキストエリアを作成。
・テキストエリアの幅と高さは文字数に応じて拡大・縮小する(テキストエリア幅については前述の質問内容になります)
・テキストエリア幅は親要素を超えようとすると自動的に折り返します。
テキストエリアの高さが親要素の最下部(右端)まで到達した時に文字数を制限できるようにしたいです。
アラートではなく、それ以降の文字が打てなくなるようにしたいです。
参考資料:
https://teratail.com/questions/207630?link=qa_related_sp
https://joyplot.com/documents/textarea-%E5%85%A5%E5%8A%9B%E8%A1%8C%E6%95%B0%E5%88%B6%E9%99%90/
様々調べてみたのですが、参考の資料はあらかじめ最大文字数が決まって文字数を制限するようになっています。
今回の条件は、
・文字入力の際、テキストエリアの高さが親要素の最下部まで来た時
・その際にテキストエリア内の最大文字数が何文字か
2番目の条件は、テキストエリアの作成位置、幅や高さが変動する為に毎回最大文字数が変わります。
なので、あらかじめ文字数が何文字まで入力できるかわかりません。
この2つの条件を元に入力制限ができると考えているのですが…
お手数ですが何卒教えて頂きたくお願い致します。
全体ソースコード:
https://codepen.io/k4a/pen/JjNEjOE?editors=1111
※前述の質問にて回答者様より頂いた引用になります。
ソースコード:
※あくまで引用を元に作成してるので、全体ソースコードと若干異なります。
JavaScript
1 element.oninput = (e) => { 2 let t = e.target; 3 dummyElement.textContent = t.value; 4 dummyElement.style.width = 0; 5 if (t.value.length > 0) { 6 isDummyobserve = true; 7 observeElement = t; 8 } 9 10 if (t.nodeName != 'TEXTAREA') return; 11 12 const widthBoundary = element.clientWidth - (t.getBoundingClientRect().left - cRect().left); 13 if (widthBoundary > t.scrollWidth + 16) { 14 t.style.width = 'auto'; 15 t.style.whiteSpace = 'nowrap'; 16 t.style.width = (t.scrollWidth) + 'px'; 17 } else { 18 console.log('規定値を超えました'); 19 t.style.whiteSpace = 'normal'; 20 t.style.width = widthBoundary + 'px'; 21 console.log(t.style.width); 22 console.log(t.value.length); 23 24 } 25 26 27 if (element.clientHeight - (t.getBoundingClientRect().top - cRect().top) > t.scrollHeight && 28 t.value > max.length) { 29 console.log('test'); 30 t.style.height = "auto"; 31 t.style.height = (t.scrollHeight) + 'px'; 32 33 } else { 34 console.log('入力不可'); 35 t.value = ''; 36 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/01 02:57