javascript确认阻止屏幕更新在Chrome浏览器
javascript confirm prevents screen update in Chrome
我有一个javascript函数做两件事:
- 更改表格行背景色
- 发出confirm()弹出窗口,要求用户确认删除(高亮显示的)行
它在Firefox上运行良好。在Chrome上,弹出窗口出现。但是背景直到我取消confirm()框后才改变颜色,这有点违背了让用户知道要删除哪一行的目的。
我确信这与javascript的异步特性有关。但我得知道怎么绕过它。现在,这两行代码是:
$(icon).closest( "tr" ).css( "background-color", "yellow" );
if ( confirm( message )) {.......}
我需要做些什么来确保行是黄色的,而弹出窗口显示,不等待更改为黄色,直到弹出窗口消失后?我可以尝试延迟等等。但这是抓救命稻草。有"正确"的方法来处理这个问题吗?
同样,在Firefox....上运行良好Chrome浏览器上没有。没有尝试过其他浏览器。
谢谢。杰瑞
我可以尝试延迟等。但这是抓救命稻草。
没有。
什么时候渲染完全取决于浏览器。每个浏览器引擎都有自己的优化。解决这个问题的唯一方法是短暂的延迟。
一种可靠的延迟形式是requestAnimationFrame()
。我认为您可以合理地确定,一旦触发此选项,浏览器将重新绘制之前的任何内容。没有测试过,但是试试这样做:
$(icon).closest('tr').css('background-color', 'yellow');
requestAnimationFrame(function () {
if (confirm(message)) {
}
});
还要注意,您无法控制确认框出现的位置。它可能在你的内容上面。它是由浏览器决定如何呈现,是传统的工具样式窗口,还是全屏模式。
我也有同样的问题。当我在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对JavaScript对话框的政策
相关文章:
- CORS-服务器端cookie没有保存在chrome浏览器上
- 我想用Javascript网站在开放的Chrome浏览器上执行功能
- Chrome浏览器“;挂起”;同时在循环中执行AJAX请求
- 通过Android Chrome浏览器下载文件
- Angularjs ng-options 问题仅适用于 Chrome 浏览器
- 当页面加载时,使谷歌chrome浏览器成为全屏浏览器
- 使用javascript在chrome浏览器的新选项卡中以程序方式打开URL
- 当代码放在Joomla文章中时,Jquery拖放在Chrome浏览器中无法正常工作
- Chrome浏览器:未从响应标头设置cookie
- Javascript只能在Chrome浏览器中使用,不能在Firefox中使用
- 如何禁用chrome浏览器中的web应用程序
- 我可以禁用Chrome浏览器中的“你已经全屏”通知吗
- 为什么asp按钮的java脚本click()函数在chrome浏览器中不起作用
- 节点检查器无法打开chrome浏览器,引发错误ENOENT
- 如何从Google Chrome浏览器中打开浏览窗口
- JavaScript在新的选项卡中打开,而不是在Chrome浏览器中打开窗口
- 常见页眉页脚的 JavaScript 代码在 Chrome 浏览器中不起作用
- jQuery Slider 在 Android Chrome 浏览器上不起作用
- 检测 Chrome 浏览器窗口的宽度和高度,以防止元素溢出
- 即使它在 Chrome 浏览器上不起作用,也可以单击