完整而简单的解决方案
更新于 2020-05-14(改进了对手机和平板电脑的浏览器支持)
以下代码将起作用:
- 在键输入上。
- 使用粘贴的文本(右键单击和ctrl+v)。
- 使用剪切文本(右键单击和ctrl+x)。
- 使用预加载的文本。
- 所有文本区域(多行文本框)的网站宽度。
- 使用火狐浏览器(v31-67 测试)。
- 使用 Chrome(v37-74 测试)。
- 使用 IE(v9-v11 测试)。
- 使用 Edge(v14-v18 已测试)。
- 使用IOS Safari。
- 使用安卓浏览器。
- 使用JavaScript严格模式。
- 是否已验证 w3c。
- 并且精简高效。
选项 1(使用 jQuery)
此选项需要 jQuery,并且已经过测试,并且正在使用 1.7.2 - 3.6
简单(将此 jquery 代码添加到主脚本文件中,然后忘记它。
$("textarea").each(function () {
this.setAttribute("style", "height:" + (this.scrollHeight) + "px;overflow-y:hidden;");
}).on("input", function () {
this.style.height = "auto";
this.style.height = (this.scrollHeight) + "px";
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea placeholder="Type, paste, cut text here...">PRELOADED TEXT.
This javascript should now add better support for IOS browsers and Android browsers.</textarea>
<textarea placeholder="Type, paste, cut text here..."></textarea>
Test on jsfiddle
选项 2(纯 JavaScript)
很简单(将此 JavaScript 添加到主脚本文件中,然后忘记它。
const tx = document.getElementsByTagName("textarea");
for (let i = 0; i < tx.length; i++) {
tx[i].setAttribute("style", "height:" + (tx[i].scrollHeight) + "px;overflow-y:hidden;");
tx[i].addEventListener("input", OnInput, false);
}
function OnInput() {
this.style.height = "auto";
this.style.height = (this.scrollHeight) + "px";
}
<textarea placeholder="Type, paste, cut text here...">PRELOADED TEXT. This JavaScript should now add better support for IOS browsers and Android browsers.</textarea>
<textarea placeholder="Type, paste, cut text here..."></textarea>
Test on jsfiddle
选项 3 (jQuery Extension)
如果要将进一步链接应用于要自动调整大小的文本区域,则非常有用。
jQuery.fn.extend({
autoHeight: function () {
function autoHeight_(element) {
return jQuery(element)
.css({ "height": "auto", "overflow-y": "hidden" })
.height(element.scrollHeight);
}
return this.each(function() {
autoHeight_(this).on("input", function() {
autoHeight_(this);
});
});
}
});
调用方式$("textarea").autoHeight()
通过 JAVASCRIPT 更新 TEXTAREA
通过 JavaScript 将内容注入文本区域时,请附加以下代码以调用选项 1 中的函数。
$("textarea").trigger("input");
预设文本区域高度
要修复文本区域的初始高度,您需要添加一个附加条件:
const txHeight = 16;
const tx = document.getElementsByTagName("textarea");
for (let i = 0; i < tx.length; i++) {
if (tx[i].value == '') {
tx[i].setAttribute("style", "height:" + txHeight + "px;overflow-y:hidden;");
} else {
tx[i].setAttribute("style", "height:" + (tx[i].scrollHeight) + "px;overflow-y:hidden;");
}
tx[i].addEventListener("input", OnInput, false);
}
function OnInput(e) {
this.style.height = "auto";
this.style.height = (this.scrollHeight) + "px";
}
<textarea placeholder="Type, paste, cut text here...">PRELOADED TEXT. This JavaScript should now add better support for IOS browsers and Android browsers.</textarea>
<textarea placeholder="Type, paste, cut text here..."></textarea>