Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Autorozszerzalne textarea
Forum PHP.pl > Forum > Przedszkole
Skie
Witam,
pracuje obecnie nad auto-rozszerzalnymi textarea. Ma to działać na takiej zasadzie, że podczas pisania edytowana jest wysokość pola textarea. Na początku wynosi ona 13px (tyle by się mieściła na "widoku" jedna linijka), a max. chcę zrobić 39-52px (3-4 linijki, a potem blokowanie, by się już więcej nie rozszerzało). Zastanawiam się jak to zrobić uniwersalnie (tak, by textarea się edytowało nie tylko przy "enterze" ale także przy "backspace" [zmniejszanie wysokości jeśli konieczne], przy normalnym pisaniu, gdy się tekst nie mieści w jednej linijce, a także przy wklejaniu, wycinaniu).

Wpadłem na pomysł że najlepszy sposób będzie taki: (ogólne założenie tylko)

Kod
obj.style.height = obj.scrollHeight + 'px';


Dzięki temu, nie musiałbym się bawić w obliczenia, sprawdzania kiedy zwęzić, kiedy rozszerzyć textarea, przewidywać różne zachowanie na różne klawisze itp.
Niestety takie rozwiązanie ma ten minus, że działa jakby z opóźnieniem.

Naciśnięcie klawisza -> funkcja w JS -> update DOMa

Tak, więc np. po przyciśnięciu 3 razy entera, mam tylko 2 dodatkowe linijki, a jak dopiszę cokolwiek, np literę 'a', to dopiero wtedy dochodzi 3-cia linia z poprzedniego entera.
Wydaje się to w sumie mało uciążliwe, ale np. przy wklejaniu/wycinaniu to dość duża różnica.

Ma ktoś jakiś pomysł jak to obejść, tak by było to robione na bieżąco? Albo inny pomysł działania tego rozszerzania?
v1t4n
W trakcie pisania do entera dodaj se sztywna spacje a jak ktos dopisze znak to ja wywali. Niestety nic lepszego nie przychodzi mi do glowy ^^
Skie
No ale wtedy bym musiał mnóstwo warunków robić co do tego.
Wiesz chodzi mi, że osobno na enter, osobno na backspace, osobno na wklejanie, wycinanie itp.,do tego obsługa w różnych przeglądarkach tego (często różnice wynoszą +- 1px ;-/) sprawia, że jest to praktycznie nie do zrealizowania, a jeśli nawet to bardzo dużo niepotrzebnie męczącego przeglądarkę kodu

Szukam jakiegoś sposobu uniwersalnego ;-)
lord_t
Przypuszczam, że skorzystałeś z onkeypress/onkeydown: spróbuj onkeyup
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.