【问题标题】:css() doesn't finish before next statement in Safaricss() 在 Safari 中的下一条语句之前没有完成
【发布时间】:2012-05-19 20:41:14
【问题描述】:

我有这段代码:

$(this).css('color', 'red');
if(confirm('Do you want to delete this item?'))
    window.location.href = link;
else
    $(this).css('color', 'black');

但不幸的是 css('color', red) 在调用 confirm() 之前没有执行。如果我使用 animate 而不是 css,并在回调函数中执行 confirm(),它会在 before 动画实际完成之前执行。

请注意,这个问题不会出现在 chrome 中,它可以正常工作(对我而言)。

【问题讨论】:

    标签: jquery safari timing


    【解决方案1】:

    确认对话框可能会阻止页面在关闭之前进行更新。为避免这种情况,请在打开浏览器之前给它一些时间:

    var $this = $(this); // in the callback we cannot use `this`
    $this.css('color', 'red');
    window.setTimeout(function() {
        if(confirm('Do you want to delete this item?'))
            window.location.href = link;
        else
            $this.css('color', 'black');
    }, 0);
    

    【讨论】:

    • 与 VisioN 的回答类似,这有时有效,有时无效 - 对我来说。
    • 您是否考虑过使用基于 html 的确认对话框而不是原生对话框?这不会有这些缺点。
    • 是的,这是个好主意,只是这个问题引起了我的兴趣,所以我想在开发一些解决方法之前尝试找到解决方案;)
    【解决方案2】:

    小超时应该有帮助:

    var el = $(this);
    el.css('color', 'red');
    setTimeout(function() {
        if(confirm('Do you want to delete this item?'))
            window.location.href = link;
        else
            el.css('color', 'black');
    }, 1);
    

    演示: http://jsfiddle.net/jWRDq/

    【讨论】:

    • 似乎在 jsfiddle 中工作,但在我的页面上它有时工作,有时它不工作。间隔 10 次就可以了,但我想这有点依赖于每个访问者的计算机?
    【解决方案3】:

    在 if 语句中这对你有用吗:

    同意测试人员 - firebug 太宽容了。

    var $this = false;
    if($this = $(this).css('color', 'red')) {
     if(confirm('Do you want to delete this item?')) {
      window.location.href = link;
     } else {
      $this.css('color', 'black');
     }
    }
    

    【讨论】:

    • 随意编辑它?我错过了什么? -- 它应该评估为真(这不是比较)。
    • 您错过了从if 语句中删除var 并在之前定义$this
    • 在语句中定义 var 使其仅在操作的右侧完成时才可用。此语法有效且不会导致错误。此外,它需要将结果分配给一个变量,因此它需要在返回之前完成 css,然后在调用 confirm() 之前创建一个执行中断 - 理论上。我无法复制 safari 上的原始错误。
    • 你可以试试你以前的版本,它会引发类似Uncaught SyntaxError: Unexpected token var
    • Ah =) 取决于我在什么模式下使用萤火虫 - 测试人员注意 - 编辑答案。谢谢!
    猜你喜欢
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 2017-09-14
    • 2019-03-16
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多