javascript - 输入开始时 Rails 文本区域高度突然增加

标签 javascript css ruby-on-rails

在 View 中:

<%= f.text_area :content, rows: 2, class: "notice_area" %>

我有以下将文本区域的高度调整为行数的 javascript:

<script type="text/javascript">
  function h(e) {
    $(e).css({'height':'auto','overflow-y':'hidden'}).height(e.scrollHeight);
  }
  $('.notice_area').each(function () {
    h(this);
  }).on('input', function () {
    h(this);
  });
</script>

CSS:

.notice_area {
  display: inline-block;
  width: 100%;
  min-height: 46px;
  padding-top: 3px;
  padding-bottom: 0px;
  border-radius: 7px;
  border: 1px solid red;
}

问题是,当您开始在文本区域中输入时,无论 padding-top 的值是多少,高度都会突然从默认的 46px 增加,在本例中为 3px。这是一件小事,但非常烦人。当 padding-top 设置为 0px 时就可以了。 我不明白为什么开始输入时高度不会保持在 46px。 为什么会这样?我已尽一切努力阻止它,但没有成功。

最佳答案

不幸的是,我无法在实验室环境中复制整个行为。您可能想看一看:http://jsfiddle.net/L9b9tdbu/1/ .

但在我看来,问题在于 scrollHeight 包含填充这一事实。所以你得到它并将它分配给高度,本质上是再次放入填充,这使得文本区域增长了 3 个像素。

如果我是你,我会尝试将代码更改为:

function h(e) {
  $(e).css({'height':'auto','overflow-y':'hidden'}).height(e.scrollHeight-3);
}
$('.notice_area').each(function () {
  h(this);
}).on('input', function () {
  h(this);
});

即在设置高度之前减去应用的所有填充。

希望对您有所帮助!

关于javascript - 输入开始时 Rails 文本区域高度突然增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32084314/

相关文章:

ruby-on-rails - 从 ActiveRecord 对象继承

javascript - 如何使用 javascript 和 asp.net 获取 gridview 中选中的行单元格值

javascript - 如何根据当前选择类聚焦滚动

ruby-on-rails - 规范不同的数据库

css - 定义什么好的 'marker' css 样式?

html - 从中心开始从左到右的 CSS 过渡

ruby-on-rails - 系统堆栈错误 : level too deep after running db:seed

javascript - 创建元素后无法调用函数。 jQuery

javascript - 未捕获的类型错误 : fs. createWriteStream 不是函数

javascript - 将 Prop 传递给普通 child