Если речь о текстовом инпуте, можно повесить на интервал что-то вроде
if (input.value.length > input.size) input.size = input.value.length;
Если о textarea, то по аналогии:
var rx = /([^\r\n]*)\r?\n\r?/g;
var textarea = document.getElementById('foo');
var mrows = 0, mcols = 0;
rx.lastIndex = 0;
for (var _, v = textarea.value; _ = rx.exec(v); ) {
if (_[1].length > mcols) mcols = _[1].length;
++mrows
}
if (mcols > textarea.cols) textarea.cols = mcols;
if (!window.addEventListener) ++mrows;
if (mrows > textarea.rows) textarea.rows = mrows;