【发布时间】: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 可能会受到关于不安全脚本的信息栏警告的影响。
【问题讨论】:
标签: jquery google-chrome internet-explorer textarea