javascript - 在加载时调整 TextArea 的大小

标签 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 那样格式化文本

最佳答案

请参阅我对先前解决方案的修改: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();

关于javascript - 在加载时调整 TextArea 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21831181/

相关文章:

javascript - 输入按钮单击事件未在 HTML 中触发

javascript - 如何让程序等待 javascript 中的按钮按下?

javascript - 使用javascript检测404

javascript - 有条件地响应渲染

CSS - 图像和页脚问题

jquery - 为什么 css 100% - 100% 没有 absolute 就不能工作?

html - 如何使用 chrome 扩展在网页中绘制图标?

html - 使用 CGI::Application 获取 latin1 而不是 UTF-8

css - 为什么这个选择器不起作用

html - 当字符串很小时,col-xs 不起作用