jQuery / JS 获取文本区域的滚动条高度

Posted

技术标签:

【中文标题】jQuery / JS 获取文本区域的滚动条高度【英文标题】:jQuery / JS get the scrollbar height of an textarea 【发布时间】:2011-08-24 05:19:33 【问题描述】:

我有一个固定高度的文本区域。当用户在 textarea 中输入文本时,滚动条会在用户输入一些文本后出现。

如何使用 jQuery 或纯 javascript 获取滚动条高度?我一直在寻找这个几个小时,但找不到任何东西。我不能只插入一个 div 并通过 div 偏移量获取滚动条高度,因为 textarea 不允许有子元素。

请不要给我一个可以完成这项工作的 jQuery 插件的链接。我想学点东西。

【问题讨论】:

什么浏览器? FF 4.0,FF 3.6,IE。 TextAreas 在每个浏览器中的呈现略有不同。 Chrome 10 和 FF4。我已经确定 textarea 有一个滚动条! (没有那么高,但文本区域中有很多文字) 【参考方案1】:
textarea.scrollHeight

返回一个整数(像素)

【讨论】:

alert($('textarea:first').scrollHeight); 返回未定义。选择器工作正常(我用 .css 尝试过)并且包含 jQuery。 scrollHeight 是 DOM 元素的一个属性。 jQuery 对象不存在它。使用.attr('scrollHeight')$('textarea:first').get(0).scrollHeight 如果使用 jQuery 1.6 或更高版本,请使用 $('textarea:first').prop('scrollHeight) 而不是 .attr('scrollHeight)。 “从 jQuery 1.6 开始,the .prop() method 提供了一种显式检索属性值的方法,而 .attr() 检索属性……在 jQuery 1.6 之前,可以使用 .attr() 方法检索这些属性,但这不在范围内属性。”【参考方案2】:
$.each($("textarea"), function () 
    var scrollHeight = parseInt(this.scrollHeight);
    if ($("this").val() != "" && isNaN(scrollHeight) == false && scrollHeight > 0 && scrollHeight > $(this).height()) 
        console.log($(this).attr("id"));
        $(this).height(scrollHeight);
    
);

【讨论】:

【参考方案3】:

请注意,在比较 scrollHeight 时,应排除 textarea 的 upper paddinglower padding

示例

var scrollHeight = $("#textarea_id")[0].scrollHeight;
var padding = 14; //upperpadding 7 and lower padding 7.

if($("#textarea_id")[0].height() < (scrollHeight - padding)) 
  $("#textarea_id")[0].height(scrollHeight - padding);

【讨论】:

以上是关于jQuery / JS 获取文本区域的滚动条高度的主要内容,如果未能解决你的问题,请参考以下文章

jsp中多个文本区域的通用滚动条

自动调整多个文本区域的高度以适应加载的内容

选定文本区域的自定义滚动条设计[重复]

jquery获取滚动条高度和位置

使用 jQuery,我如何强制访问者滚动到文本区域的底部以启用提交按钮?

如何使用内部阴影和滚动条正确设置文本区域的样式