解决html中window对象onload方法中调用alert方法,页面内容未渲染完成即弹出对话框问题

项目jsp页面中查询操作后台处理完毕后返回处理结果提示信息,然后前台页面
alert弹框显示结果信息,但是发现页面重新绘制与弹出框顺序不确定,有时候会出现点击弹框“确定”按钮后jsp页面才进行重绘。希望能在页面重绘完成后再弹出提示信息。
但是在这里插入图片描述
网上查找资料后发现:
javascript引擎是单线程的,为了避免dom操作,http请求等耗时较长阻塞线程,js提供事件循环功能,将一些异步操作或有io阻塞的操作都
放入一个事件队列,先顺序执行同步代码,然后按顺序执行事件队列中的异步事件:
这些事件包括:
setTimeout() 设置异步延迟,DOM操作,网络io如ajax请求事件用户操作事件,比如鼠标点击等
由于以上机制,导致alert函数会先于页面渲染事件执行。解决方法是将alert替换成其他弹层插件,或者将alert 函数放到setTimeout()函数中,让其和dom操作事件一样放入事件队列中执行:setTimeout(“alert(‘ok’)”,0)

但是按照以上方法依然无效,接着查找资料发现,浏览器页面渲染重绘操作不在js
引擎执行线程中,所以页面重绘与alert函数执行顺序不确定,因此只能将alert放入setTimeout中,并设置延迟以达到页面重绘先执行alert后执行的效果。
添加延迟时间100ms后问题解决。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值