var keyUpTimeout = false; // Required variables for performance
var keyupTimer = 0;
$("#text_textarea").keyup(function(e) {
var cooldownTimeout = 500;
//Set the cooldown time-out. The height check will be executed when the user
// hasn't initiated another keyup event within this time
var ths = this;
function heightCheck(){
keyupTimer = false;
// Reset height, so that the textarea can shrink when necessary
ths.style.height = "";
// Set the height of the textarea
var newheight = this.scrollHeight + 2;
ths.style.height = newheight + "px";
}
if(keyupTimeout){ //Has a cooldown been requested?
clearTimeout(keyupTimer); //This+next line: Refresh cooldown timeout.
keyUpTimer = setTimeout(heightCheck, cooldownTimeout);
return; //Return, to avoid unnecessary calculations
}
// Set a cooldown
keyupTimer = setTimeout(heightCheck, cooldownTimeout);
keyupTimeout = true; //Request a cooldown
});
Этот фрагмент скрипта изменит высоту текстовой области, чтобы она соответствовала тексту внутри.
Обновление
Я добавил дополнительную функцию: для повышения производительности (изменение CSS).высота требует значительного количества энергии компьютера), я добавил эффект перезарядки: проверка высоты будет выполняться только тогда, когда пользователь не инициировал событие keyup
в течение 500 миллисекунд (отрегулируйте это значение в соответствии с вашими пожеланиями).