<!DOCTYPE html> <html> <head> <title>autoresizing textarea</title> <style type="text/css"> textarea { border: 0 none white; overflow-y: auto; padding: 0; outline: none; background-color: #D0D0D0; resize: none; } </style> <script type="text/javascript"> var observe; if (window.attachEvent) { observe = function (element, event, handler) { element.attachEvent('on'+event, handler); }; } else { observe = function (element, event, handler) { element.addEventListener(event, handler, false); }; } function init (maxH) { var text = document.getElementById('text'); var maxHeight=maxH; var oldHeight= text.scrollHeight; var newHeight; function resize () { text.style.height = 'auto'; newHeight= text.scrollHeight; if(newHeight>oldHeight && newHeight>maxHeight ) { text.style.height=oldHeight+'px'; } else{ text.style.height = newHeight+'px'; oldHeight= text.scrollHeight; } } /* 0-timeout to get the already changed text */ function delayedResize () { window.setTimeout(resize, 0); } observe(text, 'change', resize); observe(text, 'cut', delayedResize); observe(text, 'paste', delayedResize); observe(text, 'drop', delayedResize); observe(text, 'keydown', delayedResize); text.focus(); text.select(); resize(); } </script> </head> <body onload="init(200);"> <textarea rows="1" style="height:1em;" id="text"></textarea> </body> </html>
http://jsfiddle.net/TDAcr/