我在尝试调整文本区域大小时遇到问题,我可以在用户输入时执行此操作,但是当他们提交它时,它会被放入数据库并放入下面的文本区域并显示为消息留言板,但如果消息超过文本区域的大小,则不会显示我想知道是否有人遇到过这个问题并克服了它。
这是我想出的在打字时调整大小的解决方案,
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/