我需要一个 textarea 在框中输入我的文本,它会根据需要增加长度以避免处理滚动条,并且需要在删除文本后缩小!我不想走 mootools 或 jquery 路线,因为我有一个轻量级的形式。
根据内容长度调整大小的文本区域
IT技术
javascript
2021-01-28 01:41:55
6个回答
您可以通过设置为1px
然后读取scrollHeight
属性来检查内容的高度:
function textAreaAdjust(element) {
element.style.height = "1px";
element.style.height = (25+element.scrollHeight)+"px";
}
<textarea onkeyup="textAreaAdjust(this)" style="overflow:hidden"></textarea>
它适用于 Firefox 3、IE 7、Safari、Opera 和 Chrome。
您也可以尝试contenteditable
将属性添加到普通p
或div
. 不是真的,textarea
但它会在没有脚本的情况下自动调整大小。
.divtext {
border: ridge 2px;
padding: 5px;
width: 20em;
min-height: 5em;
overflow: auto;
}
<div class="divtext" contentEditable>Hello World</div>
使用这个功能:
function adjustHeight(el){
el.style.height = (el.scrollHeight > el.clientHeight) ? (el.scrollHeight)+"px" : "60px";
}
使用这个 html:
<textarea onkeyup="adjustHeight(this)"></textarea>
最后使用这个css:
textarea {
min-height: 60px;
overflow-y: auto;
word-wrap:break-word
}
解决方案只是让滚动条检测到需要调整高度,并且每当滚动条出现在您的文本区域中时,它都会调整高度,就像再次隐藏滚动条一样。
已经实现了一个 jquery 解决方案,源代码可以在 github 上找到:https : //github.com/jackmoore/autosize。
无论出于何种原因,Alciende 的回答在 Safari 中对我来说并不完全适用,但在稍作修改后做到了:
function textAreaAdjust(o) {
o.style.height = "1px";
setTimeout(function() {
o.style.height = (o.scrollHeight)+"px";
}, 1);
}
希望这有助于某人