WP站点中jQuery修改背景色滞后于confirm弹窗,如何提前生效?
问题解决:让背景色在确认弹窗弹出前生效
问题根源在于JavaScript的单线程执行机制:confirm()弹窗会立刻阻塞JS执行线程,而浏览器的UI渲染线程与JS线程互斥,导致你设置的背景色样式还没来得及完成渲染,就被弹窗卡住了——哪怕添加console.log,日志会先输出,但样式渲染仍会被阻塞。
解决方法是把弹窗逻辑放到setTimeout中,哪怕延迟设为0毫秒,也能让浏览器先完成样式渲染,再执行弹窗代码:
// 先执行背景色设置 jQuery("#cf_course_planner tr").css("background-color", "#f66"); jQuery("#cf_course_planner tr:eq(0)").css("background-color", "#fff"); // 将弹窗逻辑放入setTimeout,给浏览器留出渲染时间 setTimeout(function() { if (confirm("Confirm deletions of all entries\nEither OK or Cancel.")) { alert("You pressed OK!"); } else { return false; } }, 0);
原理是setTimeout会把回调函数放到事件队列末尾,等当前同步任务(样式修改)执行完毕、浏览器完成UI渲染后,才会执行弹窗逻辑,这样背景色就能提前显示出来。
内容的提问来源于stack exchange,提问作者Paul Mc
相关产品推荐
相关产品推荐

