在网络上发现一方法比较简单的实现文本框高度自适应,于是封装了这个函数,全兼容IE6+与现代浏览器!具体函数代码如下:
/**
* 文本框根据输入内容自适应高度
* @author tang bin
* @version 0.3
* @see https://www.feishuai.vip/article-9-32.html
* @param {HTMLElement} 输入框元素
* @param {Number} 设置光标与输入框保持的距离(默认20
* @param {Number} 设置最大高度(可选
*/
var autoTextarea = function (elem, extra, maxHeight {
extra = extra || 20;
var isFirefox = !!document.getBoxObjectFor || 'mozInnerScreenX' in window,
isOpera = !!window.opera && !!window.opera.toString(.indexOf('Opera',
addEvent = function (type, callback {
elem.addEventListener ?
elem.addEventListener(type, callback, false :
elem.attachEvent('on' + type, callback;
},
getStyle = elem.currentStyle ? function (name {
var val = elem.currentStyle[name];
if (name === 'height' && val.search(/px/i !== 1 {
var rect = elem.getBoundingClientRect(;
return rect.bottom - rect.top -
parseFloat(getStyle('paddingTop' -
parseFloat(getStyle('paddingBottom' + 'px';
};
return val;
} : function (name {
return getComputedStyle(elem, null[name];
},
minHeight = parseFloat(getStyle('height';
elem.style.maxHeight = elem.style.resize = 'none';
var change = function ( {
var scrollTop, height,
padding = 0,
style = elem.style;
if (elem._length === elem.value.length return;
elem._length = elem.value.length;
if (!isFirefox && !isOpera {
padding = parseInt(getStyle('paddingTop' + parseInt(getStyle('paddingBottom';
};
scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
elem.style.height = minHeight + 'px';
if (elem.scrollHeight > minHeight {
if (maxHeight && elem.scrollHeight > maxHeight {
height = maxHeight - padding;
style.overflowY = 'auto';
} else {
height = elem.scrollHeight - padding;
style.overflowY = 'hidden';
};
style.height = height + extra + 'px';
scrollTop += parseInt(style.height - elem.currHeight;
document.body.scrollTop = scrollTop;
document.documentElement.scrollTop = scrollTop;
elem.currHeight = parseInt(style.height;
};
};
addEvent('propertychange', change;
addEvent('input', change;
addEvent('focus', change;
change(;
};
调用方法如下(textarea_id为textarea的id值):
autoTextarea(document.getElementById('textarea_id';
另外一种简易的实现方法:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>TEXTAREA自适应文字行数的多少</title>
</head>
<body>
<textarea rows="6" name="s1" cols="27" onpropertychange="this.style.posHeight=this.scrollHeight"></textarea>
</body>
</html>