dram.me

textarea高度自适应机制实现

本文描述如何在多个系统中实现textarea高度自适应。

OFBiz实现

在OFBiz中,可以通过将以下代码写入themes/rainbowstone/webapp/rainbowstone/js/rainbowstone.js实现高度自适应:

document.addEventListener("DOMContentLoaded", (event) => {
    Array.from(document.getElementsByTagName("textarea")).forEach(textarea => {
        textarea.style.overflowY = "hidden";
        textarea.style.height = textarea.scrollHeight + "px";

        textarea.addEventListener("input", () => {
            textarea.style.height = "auto";
            textarea.style.height = textarea.scrollHeight + "px";
        });
    });
});

Moqui实现

Moqui基于Quasar构建浏览器端UI控件,所以对textarea的调整也基于Quasar提供的控件属性配置。具体实现是调整runtime/template/screen-macro/DefaultScreenMacros.qvt.ftl文件中的text-area宏,为q-input添加autogrow属性。

但这个方案的一个问题是,一旦添加autogrow属性,控件高度调整为一行,用户无法区分多行和单行输入,但两者对于回车键的交互是不同的。