在加载时调整TextArea的大小

时间:2014-02-17 14:06:38

标签: javascript html css textarea

我在尝试调整文本区域时遇到问题,我可以在用户输入时执行此操作,但是当他们提交时,这会被放入数据库并放入下面的文本区域并显示为消息留言板,但如果消息超出文本区域的大小,它没有显示我想知道是否有人有这个问题并克服它。

这是我提出的用于在打字时调整大小的解决方案,

function resizeTextarea (id) {
  var a = document.getElementById(id);
  a.style.height = 'auto';
  a.style.height = a.scrollHeight+'px';
}

function init() 
{
  var a = document.getElementsByTagName('textarea');
  for(var i=0,inb=a.length;i<inb;i++) 
  {
     if(a[i].getAttribute('data-resizable')=='true')
     {
      resizeTextarea(a[i].id);
     }
  }
}

addEventListener('DOMContentLoaded', init);

这是在我的其他页面中的textarea上的keyup上调用我已经使用它但是我试图做这样的事情来加载它时调整大小但是它不起作用但是当按下一个键时它会起作用单击按钮。

onload="resizeTextarea('commentstext');"

我知道我可以随时将它滚动或将其放入div中但div如果我在文本中执行换行符并将其提交给div,则不会将文本格式化为textarea

2 个答案:

答案 0 :(得分:1)

请参阅我对先前解决方案的修改:http://jsfiddle.net/CbqFv/570/

HTML

<textarea cols="42" rows="1">
1 ...by default, you can write more rows</textarea><br />
<br />
<textarea cols="42" rows="5">
1
2
3
4
5 ...by default, you can write more rows</textarea><br />
<br />
<textarea cols="42" rows="10">
1
2
3
4
5
6
7
8
9
10 ...by default, you can write more rows</textarea>

CSS

textarea {
  border: 1px solid gray;
  border-radius: 3px;
  line-height: 1.3em;
  overflow: hidden;
  padding: 0.3em 0.3em 0 0.3em;
  outline: none;
  background-color: white;
  resize: none;
}

的JavaScript

var observe;
if (window.attachEvent) {
  observe = function (element, event, handler) {
    element.attachEvent('on'+event, handler);
  };
}
else {
  observe = function (element, event, handler) {
    element.addEventListener(event, handler, false);
  };
}
function init () {
  function resize (element) {
    element.style.height = 'auto';
    element.style.height = element.scrollHeight+'px';
  }
  /* 0-timeout to get the already changed text */
  function delayedResize (element) {
    window.setTimeout(function() { resize(element) }, 0);
  }
  var textareas = document.getElementsByTagName("textarea");
  for (i = 0; i < textareas.length; i++) {
    var textarea = textareas[i];
    observe(textarea, 'change', function() { resize(this) });
    observe(textarea, 'cut', function() { delayedResize(this) });
    observe(textarea, 'paste', function() { delayedResize(this) });
    observe(textarea, 'drop',function() { delayedResize(this) });
    observe(textarea, 'keydown', function() { delayedResize(this) });
    textarea.focus();
    textarea.select();
    resize(textarea);
  }
}

init();

答案 1 :(得分:0)

来自autosize文档:

  

Autosize无法知道textarea的值何时出现   通过JavaScript改变了。如果这样做,请触发   更新高度后立即发生autosize.resize事件。例如:

     

$('#example')。val('New Text!')。trigger('autosize.resize');

因此,在更新textarea内容后,您必须调用该触发器来自动调整它