Как сохранять высоту textarea при вводе?

Ссылка скопирована
8 февраля 2026 1 ответ

Есть поле textarea, у которого стоит expandable - 1, min-rows - 1, max-rows- 20, resize: vertical. Если поле растянуть и перейти к заполнению других полей на странице, высота растянутой textarea сохраняется, но если растянуть и начать вводить в нем какие-либо символы, оно схлопывается до min-rows-1. Подскажите, есть ли способ сделать так, чтобы высота растянутого поля сохранялась и при вводе/удалении символов независимо от количества контента и схлопывание не происходило?

Дополнительно:

Ответы:

Попробуйте так

<textarea id="myTextarea" oninput="autoResize()"></textarea>

<textarea id="myTextarea" oninput="autoResize()"></textarea>

<script> function autoResize() {       const textarea = document.getElementById('myTextarea');       textarea.style.height = '';       textarea.style.height = textarea.scrollHeight + 'px'; } </script>

<script> function autoResize() { const textarea = document.getElementById('myTextarea'); textarea.style.height = ''; textarea.style.height = textarea.scrollHeight + 'px'; } </script>

  • Кстати, еще можно проверять высоту вот так:
    <style>     textarea {       resize: none;       overflow: hidden;     }   </style> <textarea id="myTextarea" onkeydown="autoResize(event)"></textarea>     <script>     function autoResize(e) {       const textarea = document.getElementById('myTextarea');       if (e.key === 'Backspace' || e.key === 'Delete') {         textarea.style.height = '';         textarea.style.height = textarea.scrollHeight + 'px';       }     }   </script>

    <style> textarea { resize: none; overflow: hidden; } </style> <textarea id="myTextarea" onkeydown="autoResize(event)"></textarea> <script> function autoResize(e) { const textarea = document.getElementById('myTextarea'); if (e.key === 'Backspace' || e.key === 'Delete') { textarea.style.height = ''; textarea.style.height = textarea.scrollHeight + 'px'; } } </script>

    Здесь мы добавляем атрибут `onkeydown` в textarea, чтобы вызвать функцию `autoResize(event)` при нажатии клавиши на клавиатуре. В функции `autoResize()` мы получаем ссылку на textarea и проверяем, что нажатая клавиша — это "Backspace" или "Delete". Если это так, мы сбрасываем и устанавливаем высоту textarea так же, как и в первом примере.

  • Анастасия Лисиченко, Здравствуйте, вариант function autoResize() {
    const textarea = document.getElementById('myTextarea');
    textarea.style.height = '';
    textarea.style.height = textarea.scrollHeight + 'px';
    } уже пробовал, к сожалению, не работает, второй вариант также не подойдет, потому как задача такова, чтобы поле изначально было с resize: vertical. Но все равно спасибо вам за внимание и предложенные варианты, буду пробовать еще.
  • Анастасия Лисиченко, Там еще такой момент, scrollHeight отвечает за высоту контента внутри элемента, а при растяжении поля контента по факту внутри нет, т.к. мы ничего не вводим, а просто тянем поле за треугольник в нижнем углу, поэтому при вводе/удалении срабатывает схлопывание до минимальной высоты, которая задана через min-rows-1.

https://medium.com/@chandrahasstvs/building-your-o...

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Мария Код Ответ

Для того чтобы сохранить высоту textarea при вводе текста, можно использовать следующий подход:

1. HTML:
```html

```

2. JavaScript:
```html

document.addEventListener('input', function (e) {
if (e.target.tagName.toLowerCase() !== 'textarea') return;
autoExpand(e.target);
}, false);

var autoExpand = function (field) {
field.style.height = 'inherit';
var computed = window.getComputedStyle(field);
var height = parseInt(computed.getPropertyValue('border-top-width'), 10)
+ parseInt(computed.getPropertyValue('padding-top'), 10)
+ field.scrollHeight
+ parseInt(computed.getPropertyValue('padding-bottom'), 10)
+ parseInt(computed.getPropertyValue('border-bottom-width'), 10);

field.style.height = height + 'px';
};

```

Этот код будет автоматически изменять высоту textarea при вводе текста, чтобы она всегда подстраивалась под содержимое. Вы можете настроить начальное количество строк (rows) в HTML и скрипт автоматически будет регулировать высоту textarea в зависимости от вводимого текста.

Надеюсь, это поможет вам сохранить высоту textarea при вводе текста. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно