【发布时间】:2018-05-23 14:42:00
【问题描述】:
为什么在这个 jQuery 例子中,jsFiddle alert 函数在 jquery 修改 .parent 的背景之前执行,即使 if(p.css('background-color', 'yellow')) 是先评估的。
CSS
.parent {
width: 400px;
padding: 10px;
margin: 10px;
border: 1px solid;
background-color: green;
}
HTML
<div class="parent">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Deleniti qui esse illum, unde labore. Repellendus sunt, quidem eligendi aliquid architecto animi officia itaque ducimus impedit, enim laudantium quis, cupiditate optio.</div>
jQuery
var p = $('.parent');
p.css('border', '3px solid blue');
if(p.css('background-color', 'yellow')){
alert('cool')
} else {
alert( 'Not COOL')
}
谢谢
【问题讨论】:
-
Why {...} alert function is executed before jquery modifying the .parent's background。不是因为window.alert是模态的,所以在模态阻塞UI 之前UI 没有时间重绘。并且在if条件中设置 CSS 属性没有真正的用例意义,因为它总是被评估为真实值 -
p.css('background-color', 'yellow') 将颜色设置为黄色。因此在设置颜色后执行警报
-
您可以将警报包装在 setTimeout 函数中,延迟它
-
看看@JiiB 是什么意思:jsfiddle.net/5gahLa6w/1 使用超时,你将函数回调放在事件队列中,让浏览器首先重新绘制 UI
-
@VineetDesai 设置颜色后但在屏幕上绘制颜色之前执行警报
标签: javascript jquery