Bueno, me he rendido. Buscando buscando he entrado ejemplos de crecimiento vertical:
http://markos.gaivo.net/examples/gro...rea/index.html
Así que mi script se reduciría a ésto:
Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title></title>
<meta name="Author" content="derkeNuke">
</head>
<body>
<textarea cols="15" rows="5" onkeydown="ajusta(this)"></textarea>
<div id="info"></div>
<script>
var primeraVez=false;
var colsOriginal, altoOriginal, bordes;
function ajusta(box) {
var cols=parseInt( box.getAttribute("cols") );
if(primeraVez==false) {
colsOriginal = cols;
altoOriginal = box.offsetHeight;
primeraVez = true;
bordes = box.offsetHeight - box.scrollHeight;
}
//la palabra más larga (si es más larga que cols) definirá el nuevo cols
var palabras=box.value.split(/s/);
for(var i=0, max=0, laMasLarga=""; i<palabras.length; i++)
if(palabras[i].length>max) {
max=palabras[i].length;
laMasLarga = palabras[i];
}
if(max>colsOriginal)
box.setAttribute("cols",max);
else
max = parseInt(colsOriginal)+1; // el atributo cols deja un caracter más de los que dice dejar.
document.getElementById("info").innerHTML = (box.scrollHeight+bordes) +" -- "+ box.offsetHeight;
box.style.height = Math.max( box.scrollHeight+bordes, altoOriginal );
}
</script>
</body>
</html>
Más alguna manera de quitar altura si se borran caracteres o cuando se aumenta el ancho.
Seguiré en ello.