Javascript 文本框textarea高度随内容自适应增长收缩

  直接上代码:

  方案一:

  

   [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

  方案一在各浏览器中,文本框随内容自适应增长都没有问题;但在删除内容时收缩方面表现有所差异,IE、Opera表现正常,Firefox、Chrome、Safari不会收缩。原因是文本框内容高度小于文本框高度时scrollHeight值等于文本框高度,而不是文本框内容高度。

  方案二:

  

复制代码 代码如下:

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

  <html xmlns="http://www.w3.org/1999/xhtml" >

  <HTML>

  <HEAD>

  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

  <TITLE>枫芸志 » 文本框textarea高度自适应增长/伸缩</TITLE>

  </HEAD>

  <BODY>

  <textarea id="txtContent" rows="5" cols="50" onkeyup="ResizeTextarea()" style="overflow-y:hidden;">Textarea高度随内容自适应地增长,无滚动条

  晴枫制作

  http://glzy8.com</textarea>

  <script type="text/javascript">

  // 最小高度

  var minRows = 5;

  // 最大高度,超过则出现滚动条

  var maxRows = 12;

  function ResizeTextarea(){

  var t = document.getElementById('txtContent');

  if (t.scrollTop == 0) t.scrollTop=1;

  while (t.scrollTop == 0){

  if (t.rows > minRows)

  t.rows--;

  else

  break;

  t.scrollTop = 1;

  if (t.rows < maxRows)

  t.style.overflowY = "hidden";

  if (t.scrollTop > 0){

  t.rows++;

  break;

  }

  }

  while(t.scrollTop > 0){

  if (t.rows < maxRows){

  t.rows++;

  if (t.scrollTop == 0) t.scrollTop=1;

  }

  else{

  t.style.overflowY = "auto";

  break;

  }

  }

  }

  </script>

  </BODY>

  </HTML>

  方案二在各浏览器中表现相同,皆可使文本框随内容自适应增长和收缩。但有个缺憾是在文本框高度增长的时候,文本框显示会有一个跳动。

  另以上两个方案对于通过文本框右键菜单选择剪切、粘贴、删除等命令操作文本内容的情形都无效。可以说暂未找到完美的解决方案,留待以后再来研究。哪位同学如果有完美的方案的话敬请赐教!

  

  其他方案:

  1. A different approach to elastic textareas 方案二即参考此文后实现
  2. Build an Elastic Textarea with Ext JS
  3. Smart TextArea: scrollHeight in IE, Firefox, Opera and Safari

  原文链接:http://witmax.cn/javascript-textarea-auto-grow.html