jQuery 实现文本框 textarea 自适应高度

Miles
Miles
发布时间:2026-10-13| 5人浏览过
原创

在 Web 开发中,默认 HTML <textarea> 元素通常具有固定高度,超出部分需滚动查看,交互体验欠佳。使用 jQuery 编写自定义脚本,可以实现高度根据文本内容自动调整的功能,并支持限制最小与最大高度,确保页面布局稳定。

核心功能与效果

该方案主要解决以下问题:

  • 自动撑开:当用户输入文本时,文本框高度随行数增加而自动向下扩展。
  • 限制范围:可设定最小高度(保证初始外观)和最大高度(防止无限拉长破坏页面结构)。
  • 滚动控制:达到最大高度后,自动切换为滚动模式(overflow-y: scroll),否则保持隐藏滚动条。

准备工作

在使用此方法前,请确保:

  1. 已引入 JQuery 库(建议版本 1.7.1 或更高)。
  2. 文本框标签包含特定的 ID 或 Class,以便 JS 绑定。
  3. HTML 结构中已包含必要的 CSS 基础样式。

实现步骤

第1步:定义 HTML 结构

创建一个标准的 <textarea> 元素。建议预先设置基础的内联样式,如移除默认边框和调整初始高度。

<body>
    <textarea id="textarea3" style="overflow-y:hidden; height:20px;resize: none"></textarea>
</body>

注意:resize: none 禁用了浏览器原生的拖拽调整大小功能,完全交由 JavaScript 控制。

第2步:初始化 jQuery 插件逻辑

通过扩展 jQuery 原型 $.fn.extend,新增 textareaAutoHeight 方法。该方法内部维护状态配置,并监听关键事件。

$(function() {
  // 1. 默认配置:无特殊限制
  $("#textarea1").textareaAutoHeight();
  
  // 2. 仅限制最大高度为 100px
  $("#textarea2").textareaAutoHeight({maxHeight: 100});
  
  // 3. 限制最小高度 50px,最大高度 200px
  $("#textarea3").textareaAutoHeight({minHeight: 50, maxHeight: 200});
});

$.fn.extend({
  textareaAutoHeight: function(options) {
    this._options = {
      minHeight: 0,
      maxHeight: 1000
    };

    // 合并用户传入的参数
    this.init = function() {
      for (var p in options) {
        this._options[p] = options[p];
      }
      
      // 若未指定最小高度,则取当前实际高度作为初始值
      if (this._options.minHeight == 0) {
        this._options.minHeight = parseFloat($(this).height());
      }
      
      // 将配置属性写入 DOM 元素的 attribute 中,方便后续读取
      for (var p in this._options) {
        if ($(this).attr(p) == null) {
          $(this).attr(p, this._options[p]);
        }
      }
      
      // 绑定事件:输入、内容改变、获取焦点时触发重置高度
      $(this).keyup(this.resetHeight)
             .change(this.resetHeight)
             .focus(this.resetHeight);
    };

    // 核心算法:计算新高度并应用
    this.resetHeight = function() {
      var _minHeight = parseFloat($(this).attr("minHeight"));
      var _maxHeight = parseFloat($(this).attr("maxHeight"));

      // IE 浏览器兼容性处理:某些版本需要先重置高度
      if (!$.browser.msie) {
        $(this).height(0);
      }
      
      // 获取内容的自然滚动高度
      var h = parseFloat(this.scrollHeight);
      
      // 边界判断:clamp 函数逻辑
      // 如果 h 小于最小值,取最小值;大于最大值,取最大值;否则取 h
      h = h < _minHeight ? _minHeight : h > _maxHeight ? _maxHeight : h;
      
      // 应用高度并修正滚动位置
      $(this).height(h).scrollTop(h);
      
      // 超过最大高度时显示垂直滚动条,否则隐藏
      if (h >= _maxHeight) {
        $(this).css("overflow-y", "scroll");
      } else {
        $(this).css("overflow-y", "hidden");
      }
    };
    
    // 执行初始化
    this.init();
  }
});

第3步:验证与调试

在浏览器中打开页面,依次进行以下操作以验证效果:

  1. 动态增长:在文本框内持续输入回车换行,观察框体是否平滑向下伸展。
  2. 上限测试:继续输入直至文本框触及设定的最大高度(如 200px),检查此时是否出现滚动条且不再增高。
  3. 回缩测试:删除部分内容,确认高度是否随之缩小至对应内容的高度。

注意事项

  • 兼容性提示:代码中使用了 $.browser.msie,这在较新版本的 jQuery (1.9+) 中已被移除。若使用新版 jQuery,建议使用 userAgent 检测或 Polyfill 替代该判断。
  • CSS 冲突:确保外部 CSS 没有强制覆盖 height 或 max-height 属性,否则可能导致脚本失效。

以上就是 jQuery 实现文本框 textarea 自适应高度的详细内容,更多关于前端输入控件优化的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。