javascript确认会阻止Chrome中的屏幕更新

时间:2016-09-19 22:51:17

标签: javascript css asynchronous confirm

我有一个javascript函数可以完成两件事:

  • 更改表格行背景颜色
  • 发出confirm()弹出窗口,要求用户确认删除(突出显示的)行

它适用于Firefox。在Chrome上,会显示弹出窗口。但是,在我解除确认()框之后,背景不会改变颜色,这有点违背了让用户知道要删除哪一行的目的。

我确定它与javascript的异步性质有关。但我需要知道如何解决它。现在,两行代码是:

  $(icon).closest( "tr" ).css( "background-color", "yellow" );
  if ( confirm( message )) {.......}

在显示弹出窗口时,我需要做什么才能确保该行为黄色,并且在弹出窗口消失之后才等待更改为黄色?我可以尝试延迟,等等。但那是抓住稻草。有没有正确的'处理这个的方法?

再次,在Firefox上运行良好....在Chrome上使用nada。 Haven没有尝试过其他浏览器。

感谢。 杰里

2 个答案:

答案 0 :(得分:1)

  

我可以尝试延迟,等等。但那是抓住稻草。

不是。

完全取决于浏览器何时渲染事物。每个浏览器引擎都有自己的优化。处理此问题的唯一方法是短暂延迟。

一种可靠的延迟形式是requestAnimationFrame()。我认为你可以合理地确定一旦被解雇,浏览器将重新粉刷任何东西。未经测试,但尝试这样的事情:

"c = a + b"

另请注意,您无法控制出现确认框的位置。它可以在您的内容之上。由浏览器决定如何呈现,无论是传统的工具风格窗口,还是全屏模式。

答案 1 :(得分:0)

我有同样的问题。当我在Chrome中显示确认对话框时,以前的DOM更改尚不可见。用户需要查看那些DOM更改才能回复确认对话框。

为解决此问题,我使用了以下延迟。

function outerFunction() {
  console.log("do stuff");

  setTimeout(innerFunction, 0);
  return;

  function innerFunction() {
    if (confirm("really?")) {
      console.log("do more stuff");
    }
  }
}

请注意,通过使用嵌套函数,您不需要传递任何参数。

还请注意,Chromium团队强烈建议您不要使用JavaScript对话框-请参见Chromium policy on JavaScript dialogs