我是FE,也是Fe

前端来源于不断的点滴积累。我一直在努力。

统计

留言簿(15)

阅读排行榜

评论排行榜

textarea高度自动增加

最初看到这个命题,觉得不是不是直接监听事件然后设计高度么?于是我想当然的写了这么一段代码:

<script type="text/javascript">
function autoheight(){
this.height= this.scrollHeight+this.height+"px";
}

</script>
<textarea id="" rows="" cols="" onpropertychange="autoheight();" oninput="autoheight()" style="overflow:hidden;"></textarea>

这个代码我没有运行,因为一边写就发现不对劲,在propertychange函数中改变property会再次触发propertychange事件,结果就可想而知了。stack overflow。

所以需要换一种思路,新建一个textarea,将同样大的文本放到属性一样的textarea中计算其高度,然后把高度设置到目标textarea中。

<script type="text/javascript">

    
//基本函数*2
    var addHandler = window.addEventListener?
    
function(elem,event,handler){elem.addEventListener(event,handler);}:
    
function(elem,event,handler){elem.attachEvent("on"+event,handler);};

    
var $ = function(id){return document.getElementById(id);}

        
    
function autoTextArea(elemid){
        
//新建一个textarea用户计算高度
        if(!$("_textareacopy")){
            
var t = document.createElement("textarea");
            t.id
="_textareacopy";
            t.style.position
="absolute";
            t.style.left
="-9999px";
            document.body.appendChild(t);
        }
        
function change(){
            $(
"_textareacopy").value= $(elemid).value;
            $(elemid).style.height
= $("_textareacopy").scrollHeight+$("_textareacopy").style.height+"px";
        }
        addHandler($(
"target"),"propertychange",change);//for IE
        addHandler($("target"),"input",change);// for !IE
        $(elemid).style.overflow="hidden";//一处隐藏,必须的。
        $(elemid).style.resize="none";//去掉textarea能拖拽放大/缩小高度/宽度功能
    }

    addHandler(window,
"load",function(){
        autoTextArea(
"target");
    });
</script>
<textarea id="target" rows="" cols=""></textarea>

搞清楚原理其实就简单多了。要捕捉textarea的change事件在IE下可以使用propertychange,在!IE下可以使用input。

一些textarea资料做参考:

  1. textarea 的一些小技巧 http://css-tricks.com/textarea-tricks/
  2. 本文的直接资料来源:http://www.planeart.cn/?p=1489

 

 

posted on 2011-05-15 19:40 衡锋 阅读(3333) 评论(1)  编辑  收藏 所属分类: javascriptWeb开发

评论

# re: textarea高度自动增加 2011-09-15 08:35 tbw

恩 不错 收藏了   回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: