【问题标题】:Span not updated during execution跨度在执行期间未更新
【发布时间】:2019-07-13 18:31:25
【问题描述】:

我通过在每次新计算开始时打印一条消息来显示需要很长时间才能完成的代码的进度。消息被打印到一个 span 元素。但是,这只适用于 Firefox。在 Chrome 中,跨度仅在所有计算完成后才会更新。

我尝试将消息打印到 div 或 p 元素,但没有成功。我尝试使用 setTimeout 执行代码,以允许浏览器更新,这也不起作用。我尝试将 "style="position: relative"" 添加到 span 元素,但没有帮助。

我尝试在 Chrome 隐身模式下运行代码,但没有成功。

javascript:

// Export teachers
function export_teachers (){

    // Update progress span
    $("#span_progress_export").html("Export teachers");

    [...]

}

$(document).ready(function(){

    // Data confirmed for export
    $(document).on("click","#button_confirm_timetable", function() {
        export_teachers();
        export_classgroups();
        export_classrooms();
    });

});

html:

<button id="button_confirm_timetable">confirm timetable</button> 
<span id="span_confirm_status"></span>
<br><br><span id="span_progress_export">Start export</span>

每次新计算完成时,跨度都应该更新。我可以在控制台的源代码中看到跨度文本更新,但在网页上看不到。在 Firefox 中,一切正常。

【问题讨论】:

  • 您能否发布您的代码的运行版本(SO sn-p、Codepen 等)以及完整的export... 功能?这看起来可能是时间问题,但如果没有整个代码,就很难确定。
  • 感谢您的回复!发布完整的代码很困难,因为慢速部分是由多个数据库连接定义的(顺便说一句,使用 ajax 异步发生,这可能是问题吗?)。我试图构建我的代码的最小运行版本,但如果不连接到数据库,我真的不知道如何。但是,如果有必要,我当然可以更加努力;)。
  • AJAX 调用可能是问题所在。 Firefox 可能会以不同于 Chrome 的方式处理它们的生成/解析顺序。可能发生的情况是所有三个调用都是快速连续进行的,并且 HTML 每次都会更新,但是太快了,您看不到它发生。尝试throttling your connection with the dev tools 然后拨打电话。这可能会对您的问题有所了解
  • 谢谢,节流看起来是一个非常有用的功能!我试过了,但没有成功:在代码完成之前,span 消息不会改变。三个调用之间经过了相当长的时间(多秒),因此跨度消息的变化肯定是可见的。我可以在控制台中看到 span 消息在发生变化,但在屏幕上却没有……

标签: javascript jquery google-chrome


【解决方案1】:

试试这个:

html

<button id="button_confirm_timetable">confirm timetable</button> 
<span id="span_confirm_status"></span><br><br>
<span id="span_progress_export">Start export</span>

jquery

// Export teachers
function export_teachers (){
   // Update progress span
   $("#span_progress_export").html("Export teachers");
}

$(document).ready(function() {
   $("#button_confirm_timetable").click(function() {
      export_teachers();
 });
});

工作演示:https://jsfiddle.net/cruz888/pmy7ufta/2/

【讨论】:

  • 感谢您的回复!您添加了“$(document).ready”?因为这已经存在于我的代码中,对不起,我忘了添加这个(我将编辑我的问题)。所以这并不能解决我的问题,但是谢谢!
  • 又改变了点击事件的触发方式?我刚试过这个,不幸的是没有帮助......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-28
  • 2014-05-12
相关资源
最近更新 更多