原理:生成一个新的textarea,不停获取当前textarea最新的值,然后计算高度赋给当前的textarea
<textarea id="target">
var addHandler = window.addEventListener?
function(elem,event,handler){elem.addEventListener(event,handler);}:
function(elem,event,handler){elem.attachEvent("on"+event,handler);};
var aa = function(id){return document.getElementById(id);}
function autoTextArea(elemid){
if(!aa("_textareacopy")){
var t = document.createElement("textarea");
t.id="_textareacopy";
//css 一定要跟当前的 宽度 字体大小保持一致
t.style.position="absolute";
t.style.top="-300px";//保证该textarea 在界面看不到
t.style.width="95%";
t.style.fontSize="18px";
t.style.paddingTop="10px";
document.body.appendChild(t);
}
function change(){
aa("_textareacopy").value= aa(elemid).value;
aa(elemid).style.height= aa("_textareacopy").scrollHeight+aa("_textareacopy").style.height+"px";
}
addHandler(aa("target"),"propertychange",change);
addHandler(aa("target"),"input",change);
aa(elemid).style.overflow="hidden";
aa(elemid).style.resize="none";
}
addHandler(window,"load",function(){
autoTextArea("target");
});
不过 <div id="textDiv" contenteditable="true"></div> 将div设置成内容可编辑的就可以实现同样效果的textarea 而且还可以带上图片,问题时 有些浏览器可能不支持