动态滚动文本区域

IT技术 javascript ajax xhtml textarea
2021-02-25 11:17:02

我的页面上有一个 textarea html 元素,它通过 ajax 重新加载。每次都返回整个 textarea,而不仅仅是其内容,而且内容会随着时间的推移而增长。随着 textarea 我返回以下一段 javascript:

<script type="text/javascript" >

var textArea = document.getElementById('outputTextResultsArea');
textArea.scrollTop = textArea.scrollHeight;
</script>

在 firefox 3.0.7 中,这会将滚动条放在 textArea 的底部,让我可以看到最新的输出。但是在 IE 7 中,我看到了不同的行为。滚动条按预期随着内容向下移动,但是一旦内容大于 textarea 高度,滚动条就不再向下移动。似乎 IE 正在记住元素的原始滚动高度,而不是新高度。

如果有帮助,我正在使用 xhtml 过渡文档类型。此外,如果这可以通过 jQuery 实现,那也很好,因为我可以访问它。

提前致谢

尼尔

5个回答

作为一个快速的黑客,你可以这样做:

textArea.scrollTop = 99999;

另一种选择是在计时器中尝试:

setTimeout(function()
{
    var textArea = document.getElementById('outputTextResultsArea');
    textArea.scrollTop = textArea.scrollHeight;
}, 10);
谢谢这确实有效!我会留下这个问题,以防万一有任何其他建议。
2021-05-18 11:17:02

使用 jQuery,$("textarea").scrollHeight(99999) 在 Firefox 和 Chrome 上效果很好,但在 IE 上效果不佳。它似乎将其设置为 textarea 中的最大行数,而 scrollHeight 应该是像素数。(真棒展示了 IE 的出色工作)。不过,这似乎有效:

      $("textarea").scrollTop(99999)
      $("textarea").scrollTop($("textarea").scrollTop()*12)

我认为这假定字体高度为 12 像素。我很想找到一种更强大/更直接的方法来做到这一点。

不要使用超时,而是在每个 AJAX 响应上调用该函数 - 前提是您可以对其进行调整。

这将使您的浏览器免于不必要的超时。

我认为他已经这样做了,否则在 Firefox 中将无法使用
2021-05-18 11:17:02

我最终将它用于 Internet Explorer:

textArea.createTextRange().scrollIntoView(false);

这对于其他浏览器:

textArea.scrollTop = textArea.scrollHeight;

为了在你的例子中使用类似的 textarea 给你的 textarea 一个像“ id=LiveTextArea这样的名字

然后在你的 javascript 的底部添加这个(LiveTextArea 是 id 名称):

LiveTextArea.scrollTop = LiveTextArea.scrollHeight;

所以看起来像:

var textArea = document.getElementById('outputTextResultsArea');

textArea.scrollTop = textArea.scrollHeight;

现在 textarea 将在任何新条目上动态滚动插入符号/向下。