Вы используете более высокое значение текущего clientHeight и содержимого scrollHeight. Когда вы уменьшаете scrollHeight, удаляя содержимое, вычисляемая область не может уменьшаться, потому что clientHeight, ранее установленный style.height, держит его открытым. Вместо этого вы можете взять max () из scrollHeight и минимальное значение высоты, которое вы предварительно определили или рассчитали из textarea.rows.
В общем, вам, вероятно, не стоит полагаться на scrollHeight в элементах управления формы. Помимо того, что scrollHeight традиционно менее широко поддерживается, чем некоторые другие расширения IE, HTML / CSS ничего не говорит о внутренней реализации элементов управления формы, и вы не гарантируете, что scrollHeight будет что-то значимым. (Традиционно некоторые браузеры использовали для этой задачи виджеты ОС, что делает невозможным взаимодействие CSS и DOM на их внутренних объектах.) По крайней мере, проанализируйте наличие scrollHeight / clientHeight, прежде чем пытаться включить эффект.
Другой возможный альтернативный подход, позволяющий избежать проблемы, если важно, чтобы он работал более широко, может заключаться в использовании скрытого элемента div, имеющего ширину, равную ширине текстовой области, и установленного в том же шрифте. При keyup вы копируете текст из текстовой области в текстовый узел в скрытом div (не забывая заменить '\ n' на разрыв строки и экранировать '<' / '&' правильно, если вы используете innerHTML). Затем просто измерив смещение divHeight, вы получите необходимую высоту. </p>