使用 jQuery 为啥 IE/Chrome 最初会为 textarea 提供不正确的 clientHeight 和 scrollHeight?

Posted

技术标签:

【中文标题】使用 jQuery 为啥 IE/Chrome 最初会为 textarea 提供不正确的 clientHeight 和 scrollHeight?【英文标题】:Using jQuery why do IE/Chrome initially give incorrect clientHeight and scrollHeight for a textarea?使用 jQuery 为什么 IE/Chrome 最初会为 textarea 提供不正确的 clientHeight 和 scrollHeight? 【发布时间】:2011-03-23 10:31:21 【问题描述】:

Chrome(以及浏览本地文件时的 IE)为不正确的 textarea 元素的 clientHeight 提供了一个初始值。如何让 IE 和 Chrome 提供正确的值? (Problem demo'ed here)

我通过 CSS 固定/绝对定位设置文本区域的位置和大小。然后我通过 jQuery 检查 clientHeight 的值。

问题不会一直发生,但始终可以重现。具体需要满足以下条件:

    使用 Chrome (5.0)。 (如果文件是从本地计算机打开的,也可以使用 IE (8.0)。) 浏览器窗口已最大化。 jQuery 是内联的(相对于作为外部文件链接) 自浏览器启动后该页面尚未加载。 我的应用尚未处理任何命令。 变量 paddingLines 是根据 clientHeight 动态确定的。 (每次设置为 50 是一种解决方法。)

我需要准确的 clientHeight 和 scrollHeight 值,因为我使用这些属性来确定将 textarea scrollHeight “捕捉”到的位置,以便最后一个输出从文本区域的第一行开始。实际上,如果属性在调用之间始终不准确,它仍然可以工作。不幸的是,在处理第一个命令时,不准确的属性会被调整为正确的值。

我已尝试在演示 here 中隔离问题。当我尝试制作一个更简单的示例时,问题并没有始终如一地重现。我认为存在一些时间和/或浏览器优化问题,因为以下解决方法可以解决问题:

    每次将变量 paddingLines 设置为 50(而不是根据 clientHeight 动态计算) 将 jQuery 作为外部文件包括在内(而不是内联) 在初始化 textarea 之前添加一个短暂的延迟(短至 2 毫秒)。 从服务器加载 IE 中的应用程序(与从本地计算机打开)

但是,这些变通方法只是小问题,我更愿意找到问题的真正原因/解决方案。虽然这是一个小的美学问题,但我希望更深入地了解 html DOM、CSS 和 jQuery 在不同浏览器中的工作方式。我的代码有问题吗?

注意事项:

Chrome 属性不准确的原因似乎与 IE 不同 Chrome 不准确的 clientHeight 似乎是基于浏览器未最大化的大小。 IE 不准确的 clientHeight 可能会受到关于不安全脚本的信息栏警告的影响。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。我使用自适应设计得到了错误的 clientHeight。 尝试在 $(window).load(); 而不是 $(document).ready(); 上获取 clientHeight

它对我有用!

【讨论】:

【参考方案2】:

我从未找出根本原因,但我找到了一个可接受的解决方法,它不依赖于暂停毫秒数:

处理resize 事件。此事件在浏览器第一次打开时触发,即使用户没有手动调整窗口大小。至此,clientHeightscrollHeight 的值在所有浏览器中都已确定。

$(window).resize(function(e) 
    // Called when the browser is first opened.
    // Values of clientHeight and scrollHeight have settled by this point.
);

【讨论】:

【参考方案3】:

看看这两个问题的答案。

Getting height and width of body or window of web page

clientHeight returns different values depending on the mode IE8 is in

希望对你有帮助。

【讨论】:

【参考方案4】:

我正在使用 ReactJS 并且多次遇到此问题。具体来说,在 React 中,setTimeOut 可以解决问题。看到这个答案:https://***.com/a/64876916/10554343。

【讨论】:

以上是关于使用 jQuery 为啥 IE/Chrome 最初会为 textarea 提供不正确的 clientHeight 和 scrollHeight?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Windows 上的 IE/Chrome 不支持端口 27977 上的 SOCKS5 代理? [关闭]

使用JavaScript / JQuery导出 html table 数据至 Excel 兼容IE/Chrome/Firefox

jquery or not / Cross Browser Compatible iframe resize (IE, Chrome, Safari, Firefox)

IE 8.0 中 JQuery 的 JS 错误

为啥 DOM 更改后,IE 会丢弃 DOM 元素的 innerHTML/children?

jQuery AJAX GET html 数据 IE8 不工作