0

我的网站上有一个控制台,它显示了一个日志文件,并且我已经对其进行了设置,使其每 500 毫秒刷新一次。

jQuery(document).bind("ready", function() {
$("#console").animate({ scrollTop: $(document).height() }, 1000);
    function doStuff() {
        $( "#console" ).load("console/getlog.php");
        $('#console').scrollTop($('#console')[0].scrollHeight);

    } 
setInterval(doStuff, 500);
});

效果很好,但是当我尝试在控制台中选择一些文本时问题就来了。每次更新,我的选择都会被取消

我能做些什么来解决这个问题?

4

4 回答 4

1

不要使用$( "#console" ).load("console/getlog.php");更新控制台,而是考虑使用$( "#console" ).append();. 这应该可以防止整个事情重新加载和删除您的选择。

您可以执行类似append(getLog());where getLog()is 函数返回日志内容的操作。Append 可用于硬编码内容(文本/html)或函数的结果。

有关 .append() 的更多信息在这里

也在这里 - jQuery API 文档

于 2013-11-06T16:13:50.083 回答
0

我能想到的唯一解决方法是延长延迟时间,以便您有时间选择文本。

于 2013-11-06T16:07:07.453 回答
0

答案不多,但我不能发表评论,所以就这样吧。有一些方法可以访问和操作选择,但如果我没记错的话,它们取决于浏览器。看一下这个:

https://developer.mozilla.org/en-US/docs/Web/API/Selection

我建议更改 doStuff() 以保存当前选择,并在加载后尝试应用它。

于 2013-11-06T16:11:28.660 回答
0

就像 MelanciaUK 建议的那样,doStuff()当控制台处于焦点时暂停。

您可以通过 mouseover/mouseout(因此当您将其悬停时控制台停止更新)或在 mousedown/mouseup 上检测到该焦点,因为您几乎没有时间按 Cmd + C 来保存您的选择,所以这不太有用。

一些肮脏的例子: http: //jsfiddle.net/ZEW5s/(鼠标悬停后更新:http: //jsfiddle.net/ZEW5s/1/

不过,使用 tymeJV 建议setTimeout代替setInterval是一个很好的建议。

于 2013-11-06T16:28:32.337 回答