You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JQuery触发textarea按键事件无效及内边距异常问题求助

问题分析与解决方案

这个问题的核心是自动调整高度的函数没有在样式变更后重新执行,导致textarea的高度还是基于旧样式计算的scrollHeight,新添加的padding-bottom被固定的height值给“覆盖”了。

为什么会出现这个情况?

你的autosize函数只绑定在了input事件上,只有在用户输入内容时才会重新计算高度。但点击按钮添加BgA类时,textarea的内边距(尤其是上下内边距)发生了大幅变化,这时候元素的scrollHeight已经改变了,但因为没有触发input事件,autosize没重新运行,textarea的高度还是之前计算的数值——这个高度刚好把新增的padding-bottom给“挤没了”,直到你输入内容触发input事件,重新计算高度后,padding-bottom才正常显示。

而你尝试的.trigger("keypress")没用,是因为keypress事件并不会触发input事件(至少在jQuery 1.9.1里这个触发逻辑不成立),而且就算触发了,也属于绕远路的操作,直接调用函数才是最可靠的。

修复代码

只需要在添加类之后,手动调用一次autosize函数即可,修改你的点击事件代码:

$(".BgChanger").on("click", function() {
  var $textarea = $(".main_textarea");
  $textarea.addClass("BgA");
  // 手动调用autosize,基于新样式重新计算高度
  autosize.call($textarea[0]);
});

补充优化建议

你还可以优化一下autosize函数,减少重复的css调用,让代码更简洁:

function autosize() {
  var $this = $(this);
  // 先重置高度为auto,再设置为scrollHeight
  $this.css('height', 'auto').css('height', $this.prop('scrollHeight'));
}

这样修改后,点击按钮添加样式类的同时,会立刻重新计算textarea的高度,padding-bottom就能正常显示了。

内容的提问来源于stack exchange,提问作者joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:41:37