【问题标题】:Javascript/jQuery Load function, text selectionJavascript/jQuery 加载功能,文本选择
【发布时间】:2013-11-06 16:05:17
【问题描述】:

我的网站上有一个显示日志文件的控制台,我已对其进行设置,使其每 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);
});

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

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

【问题讨论】:

  • 当你点击它或当它获得焦点时暂停刷新。
  • 快速说明,load 函数每半秒触发一次,无论最后一个状态如何。根据成功/失败,在上一个load 请求的回调中使用setTimeout 可能会更好。否则,如果服务器出现问题,您每半秒就会发出一个错误请求。

标签: javascript jquery file text selection


【解决方案1】:

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

您可以执行类似append(getLog()); 的操作,其中getLog() 是一个返回日志内容的函数。 Append 可用于硬编码内容 (text/html) 或函数的结果。

More information on .append() here

Also here - jQuery API doc

【讨论】:

  • 追加只是一遍又一遍地打印相同的内容
【解决方案2】:

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

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

一些肮脏的例子:http://jsfiddle.net/ZEW5s/(在 mouseup 后暂停更新:http://jsfiddle.net/ZEW5s/1/

不过,tymeJV 建议使用 setTimeout 而不是 setInterval 是一个不错的建议。

【讨论】:

  • 是否可以在用户开始选择时将其暂停大约 5-10 秒,这样他们就有足够的时间进行选择和复制。我只是想象有人在不知情的情况下悬停鼠标的情况
  • 这绝对是可能的。我更新了我的小提琴jsfiddle.net/ZEW5s/1 - 删除了悬停的东西并添加了一些 _focusTimer 以防止 doStuff() 函数在mouseup 之后运行_focusTimer.threshold 毫秒。还在元素中添加了.pause类,表示更新功能已暂停。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多