【问题标题】:Safari Browser stop js execution after window.locationSafari浏览器在window.location之后停止js执行
【发布时间】:2017-12-21 18:15:23
【问题描述】:

我有 js 代码,它在按钮单击时显示(假)进度条。 与设置超时相比,它会更改进度条的值

 $(".quickbook-btn").click(function(){
   $(".progress").removeClass('hide')
   setTimeout(barAnim, 50);
   window.location = path
 });

 var value = 0;
 function barAnim(){
   value += 5;
   $( ".progress-bar" ).css( "width", value + "%" ).attr( "aria-valuenow", value );
   $(".progress-bar").text((value)+'%');
   if ( value == 10 || value == 20 || value == 30|| value == 50 || value == 75 || value == 90 ) {
     return setTimeout(barAnim, 1500);
   }
 }

它在 chrome、Firefox 等中完美运行。

但是当涉及到 Safari 时,它会在到达 window.location 行时停止 js 执行。

我什至测试过它,让进度达到 50%,然后调用 window.location 它立即停止执行 js,尽管 window.location 中的 url 需要 10 多秒才能完成。

这里有什么问题?为什么野生动物园总是很烂

【问题讨论】:

  • 这可能不是解决方案,但你确实错过了一些;
  • 是的,但是用分号测试,还是一样的问题

标签: javascript jquery safari


【解决方案1】:

在没有找到合适的解决方案后,我将请求转移到 ajax 并在响应时使用 window.location。 (但有一件事可以肯定 Safari 很烂)

$(".quickbook-btn").click(function(){
      $(".progress").removeClass('hide')
      setTimeout(barAnim, 50);

      $.ajax({
        method: "GET",
        url: "#{path}",
      }).done(function( data ) {
        $( ".progress-bar" ).css( "width", 100 + "%" ).attr( "aria-valuenow", 100 );
        $(".progress-bar").text((100)+'%');
        window.location = "#{club_quick_books_path}"
      });
    });

    var value = 0;
    function barAnim(){
        value += 5;
        $( ".progress-bar" ).css( "width", value + "%" ).attr( "aria-valuenow", value );
        $(".progress-bar").text((value)+'%');
        if ( value == 10 || value == 20  || value == 30|| value == 50 || value == 75 || value == 90 ) {
            return setTimeout(barAnim, 1500);
        }
        return value >= 95 || setTimeout(barAnim, 50);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多