2016-05-20 5 views
2

私は可変幅のフォントでテキストエリアを持っており、スクロールせずにテキストエリアに「フィット」するよりも多くのテキストを入力できないようにする必要があります。「適合する」テキストにテキストエリアを制限する

keydownとpreventDefault()を単にトラップすると、ユーザーがテキストエリアに物を貼り付けるユースケースをカバーできません。

テキストの幅を計算しても、どれくらいのテキストが決定されるのかわかりませんです。

どうすればよいですか?

+0

は全くJavaScriptを使用しないでください。たとえば、CSSを使用できます。 'overflow-x:hidden;' –

+0

あなたはいつも自動拡張可能なテキスト領域を作ることができます - それはスクロールしません、それはオプションですか?私はそこであなたを助けることができた。 –

+0

それは私の問題ではなく、代わりに私が必要とする**内部のテキストがオーバーフローするのを防ぐためです。同様に、私が知っておくべきことは、固定サイズのpx、可変サイズの文字ボックスからオーバーフローしたテキストの量と、それがテキストエリアの値にならないようにすることです –

答えて

0

jQueryを使用しても構わない場合、解決策は本当に簡単です。まず、テキストエリアの現在の値を変数に保存します。次にテキストエリアでinputイベントを聞き、this.scrollHeightthis.clientHeightを比較してスクロールバーがあるかどうかを確認します。その場合は、textareaの値を前の値に変更します。最後に、現在のtextarea値をlastValue変数に代入します。

を参照してくださいコードスニペット:

var lastValue = $("textarea").val() 
 
$("textarea").on("input", function(event) { 
 
    if (this.scrollHeight > this.clientHeight) { 
 
    $("textarea").val(lastValue) 
 
    } 
 
    lastValue = $("textarea").val() 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<textarea></textarea>

ピュアJavaScriptのソリューション:

const textarea = document.querySelector("textarea") 
var lastValue = textarea.value 
textarea.addEventListener("input", function(event) { 
    if (this.scrollHeight > this.clientHeight) { 
    textarea.value = lastValue 
    } 
    lastValue = textarea.value 
}) 
関連する問題