我是FE,也是Fe

          前端來源于不斷的點滴積累。我一直在努力。

          統(tǒng)計

          留言簿(15)

          閱讀排行榜

          評論排行榜

          textarea高度自動增加

          最初看到這個命題,覺得不是不是直接監(jiān)聽事件然后設(shè)計高度么?于是我想當(dāng)然的寫了這么一段代碼:

          <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>

          這個代碼我沒有運行,因為一邊寫就發(fā)現(xiàn)不對勁,在propertychange函數(shù)中改變property會再次觸發(fā)propertychange事件,結(jié)果就可想而知了。stack overflow。

          所以需要換一種思路,新建一個textarea,將同樣大的文本放到屬性一樣的textarea中計算其高度,然后把高度設(shè)置到目標(biāo)textarea中。

          <script type="text/javascript">

              
          //基本函數(shù)*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 衡鋒 閱讀(3370) 評論(1)  編輯  收藏 所屬分類: javascriptWeb開發(fā)

          評論

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

          恩 不錯 收藏了   回復(fù)  更多評論   

          主站蜘蛛池模板: 原阳县| 北流市| 九江县| 汶上县| 页游| 乌恰县| 凌源市| 榆林市| 九江县| 无棣县| 巩义市| 六枝特区| 大同县| 遂溪县| 鄂州市| 济南市| 宜城市| 萍乡市| 东阳市| 桐庐县| 黄冈市| 原平市| 永和县| 定日县| 阿尔山市| 桓仁| 当阳市| 双城市| 册亨县| 上思县| 林甸县| 峨眉山市| 焦作市| 壤塘县| 辽源市| 赣榆县| 措勤县| 吴旗县| 陈巴尔虎旗| 通化市| 淮安市|