jak to ma tylko dwa głosy. to jest niesamowity Martin. Po prostu spędzam 30 minut próbując rozwiązać ten problem. Świetna robota.
Philip Duffney,
31
To jest świetne. Chciałbym tylko dodać, że zmiana this.scrollHeight + "px"na this.scrollHeight + 3 + "px"spowoduje, że obszar tekstu będzie wystarczająco duży, aby nie pokazywał paska przewijania.
maarten
Problem: Kiedy użytkownik pisze wystarczająco dużo, aby przewinąć w dół, resetuje pozycję przewijania za każdym razem, gdy dodaje nowy wiersz za pomocą Enter.
Costa
5
Wiem, że to stare pytanie, ale mam obszar tekstowy na stronie edycji i ma on wartość już po załadowaniu strony, jak w takim razie mogę go rozszerzyć, aby pasował do treści?
Arootin Aghazaryan
1
@ArootinAghazaryan - Być może już wymyśliłeś rozwiązanie, ale dla kogokolwiek innego: po prostu utwórz funkcję z kodem zmiany rozmiaru zamiast umieszczać ją w kodzie HTML. Następnie możesz wywołać tę samą funkcję podczas ładowania strony.
Magnus Eriksson
6
Oto funkcja, która działa z jQuery (tylko dla wysokości, a nie szerokości):
functionsetHeight(jq_in){
jq_in.each(function(index, elem){
// This line will work with pure Javascript (taken from NicB's answer):
elem.style.height = elem.scrollHeight+'px';
});
}
setHeight($('<put selector here>'));
Uwaga:
operator poprosił o rozwiązanie, które nie korzysta z Javascript, jednak powinno to być pomocne dla wielu osób, które napotkają to pytanie.
Wysokość pudełka rośnie z każdym naciśnięciem klawisza, a nie tylko z nowymi liniami. Nawet cofanie się i usuwanie powodują wzrost wysokości. Napraw, a odzyskasz głos za.
Birrel,
niektóre przeglądarki, takie jak IE, nie obliczają całkiem poprawnie wysokości przewijania, co może powodować tego rodzaju problemy. nieważne, że dzieje się to również dla mnie w Chrome ...
KthProg
1
oto rozwiązanie (kolejka edycji jest pełna): w <style> textarea { resize: none; overflow: auto; } </style> <!--TEXT-AREA--> <textarea onkeyup="setHeight.call(this);">Hello World</textarea> <!--JAVASCRIPT--> <script type="text/javascript"> function setHeight(){ this.style.height = '1px'; this.style.height = this.scrollHeight + 'px'; } </script>zasadzie najpierw musisz ustawić wysokość na 1px, z tego powodu: stackoverflow.com/questions/10722058/ ...
KthProg
3
Kolejne proste rozwiązanie do dynamicznej kontroli obszaru tekstowego.
Odpowiedzi:
Nie całkiem. Zwykle odbywa się to za pomocą javascript.
jest tutaj dobra dyskusja o sposobach zrobienia tego ...
Automatyczny rozmiar obszaru tekstowego przy użyciu Prototype
źródło
tylko jedna linia
<textarea name="text" oninput='this.style.height = "";this.style.height = this.scrollHeight + "px"'></textarea>
źródło
this.scrollHeight + "px"
nathis.scrollHeight + 3 + "px"
spowoduje, że obszar tekstu będzie wystarczająco duży, aby nie pokazywał paska przewijania.Oto funkcja, która działa z jQuery (tylko dla wysokości, a nie szerokości):
function setHeight(jq_in){ jq_in.each(function(index, elem){ // This line will work with pure Javascript (taken from NicB's answer): elem.style.height = elem.scrollHeight+'px'; }); } setHeight($('<put selector here>'));
Uwaga: operator poprosił o rozwiązanie, które nie korzysta z Javascript, jednak powinno to być pomocne dla wielu osób, które napotkają to pytanie.
źródło
To bardzo proste rozwiązanie, ale na mnie działa:
<!--TEXT-AREA--> <textarea id="textBox1" name="content" TextMode="MultiLine" onkeyup="setHeight('textBox1');" onkeydown="setHeight('textBox1');">Hello World</textarea> <!--JAVASCRIPT--> <script type="text/javascript"> function setHeight(fieldId){ document.getElementById(fieldId).style.height = document.getElementById(fieldId).scrollHeight+'px'; } setHeight('textBox1'); </script>
źródło
<style> textarea { resize: none; overflow: auto; } </style> <!--TEXT-AREA--> <textarea onkeyup="setHeight.call(this);">Hello World</textarea> <!--JAVASCRIPT--> <script type="text/javascript"> function setHeight(){ this.style.height = '1px'; this.style.height = this.scrollHeight + 'px'; } </script>
zasadzie najpierw musisz ustawić wysokość na 1px, z tego powodu: stackoverflow.com/questions/10722058/ ...Kolejne proste rozwiązanie do dynamicznej kontroli obszaru tekstowego.
<!--JAVASCRIPT--> <script type="text/javascript"> $('textarea').on('input', function () { this.style.height = ""; this.style.height = this.scrollHeight + "px"; }); </script>
źródło