Complete solution with minimum and maximum height and solving problems with scroll:
var textarea =
{
tornarFlex:
function (id_textarea, altura_minima, altura_maxima)
{
var textarea = document.getElementById(id_textarea);
if (typeof altura_minima == 'undefined')
{
altura_minima = textarea.offsetHeight;
}
if (typeof altura_maxima == 'undefined')
{
altura_maxima = 0;
}
textarea.style.height = altura_minima + 'px';
textarea.addEventListener('keyup', new Function("textarea.ajusta('" + id_textarea + "'," + altura_minima + ", " + altura_maxima + ");"));
},
ajusta:
function(id_textarea, altura_minima, altura_maxima)
{
var textarea = document.getElementById(id_textarea);
while
(
textarea.offsetHeight < textarea.scrollHeight
&& (!altura_maxima || textarea.offsetHeight < altura_maxima)
)
{
textarea.style.height = (textarea.offsetHeight + 1) + 'px';
};
if (textarea.offsetHeight < altura_maxima)
{
textarea.style.overflowX = 'hidden';
textarea.style.overflowY = 'hidden';
}
else
{
textarea.style.overflowX = 'visible';
textarea.style.overflowY = 'visible';
}
}
};
textarea.tornarFlex (element_id, 20, 100);