Przekopałem już mnóstwo stron i wątków, ale nadal nie udało mi się znaleźć dokładnie tego czego szukam.
Poszukuję funkcji w JS (próbowałem na różne sposoby za pomocą CSS'a ale bez skutku), która automatycznie dopasowywałaby wysokość textarea do jej zawartości.
Większość tego co znajduje się w internecie ma za zadanie zwiększać rozmiar textarea w miarę jak użytkownik wpisuje więcej tekstu (zwłaszcza nowe linie).
Problem w tym, że funkcję te nie potrafią dopasować rozmiaru textarea z wczytaną do nich już treścią (wstawioną przez PHP). Pomaga dopiero kliknięcie na ten element, lub wpisanie czegoś (w zależności do jakiego zdarzenia przypisana jest funkcja).
Udało mi się znaleźć jedną funkcję która prawie spełnia moje oczekiwania, jednak ze względu na to, że jestem słaby w JS nie potrafię jej dostosować.
<script type="text/javascript"> 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'; } 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(); } </script>
Chodzi o to, iż funkcja ta odwołuje się do textarea o podanym ID. Na mojej stronie będzie znajdować się ich kilkanaście, a dane ID może występować tylko raz na stronie.
Próbowałem zamienić:
var text = document.getElementById('text');
na:
var text = document.getElementsByTagName('textarea');
ale niestety nie działa.
Bardzo proszę o pomoc jak dostosować tę funkcję w taki sposób, aby odwoływała się do wszystkich textarea, lub textarea do danej klasie.
Czytałem, że można to zrobić za pomocą pętli, jednak nie wychodzi mi to.
Z góry dziękuję za pomoc i pozdrawiam.