我有一个javascript函数可以完成两件事:
它适用于Firefox。在Chrome上,会显示弹出窗口。但是,在我解除确认()框之后,背景不会改变颜色,这有点违背了让用户知道要删除哪一行的目的。
我确定它与javascript的异步性质有关。但我需要知道如何解决它。现在,两行代码是:
$(icon).closest( "tr" ).css( "background-color", "yellow" );
if ( confirm( message )) {.......}
在显示弹出窗口时,我需要做什么才能确保该行为黄色,并且在弹出窗口消失之后才等待更改为黄色?我可以尝试延迟,等等。但那是抓住稻草。有没有正确的'处理这个的方法?
再次,在Firefox上运行良好....在Chrome上使用nada。 Haven没有尝试过其他浏览器。
感谢。 杰里
答案 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