chrome js写在css控制后面却先执行了 火狐的是先css,再执行了alert

代码的意思应该是 先变成红色,再弹1。但是现在反过来了。。。
<style>

    #box{
        width: 100px;
        height: 100px;
        background-color: #7FFFD4;
    }
</style>
<body>
    <div id="box"></div>
    <button>123123</button>
    
</body>
<script>
    $("button").click(function() {
        $("#box").css("background-color", "red");
        alert(1)
    })
</script>
阅读 2.3k
2 个回答

执行顺序其实没错,只是 alert() 会阻塞页面更新。

$("#box").css("background-color", "red") // 这行先执行了
alert(1) // 弹出框,页面不更新了,此时 css 其实已经改了,但是页面没有更新所以你看不到变成红色

补充

解决方法很简单,用 setTimeout 就行了

$("#box").css("background-color", "red")
setTimeout(() => {
  alert(1)
}, 0)

firefox,IE 11 上没问题,opera 和 chrome 有问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题