在这种情况下,浏览器引擎如何工作非常有趣,因为我在IE,Firefox和Chrome中对其进行了测试,并且它们的工作方式都不同。例如:

<style>
.parent{
width:100px;
}
.expand{
width:200px;
}
</style>

<div class="parent">
<div class="child"></div>
</div>

<input type="button" id="btn" />

<script>
//onready
$('#btn').click(function(){
$('.parent').toggleClass('expand');
alert($('.child').width());
});
</script>

问题出在 Chrome 。我不知道为什么,但是('.child')。width()始终是旧值,而不是其父级的新宽度。何时以及如何重新计算宽度?

最佳答案



如您所见,它可能取决于浏览器。

如果您通过释放JavaScript线程让浏览器有时间完成其工作,则会看到新值:

$('#btn').click(function(){
    $('.parent').toggleClass('expand');
    setTimeout(function() {
        alert($('.child').width());
    }, 0);
});

Live Example | Source(另请参见以下注释)

当然,延迟实际上不会是0毫秒,但是确实会非常短暂。

另外,这条线
$('parent').toggleClass('expand');

应该
$('.parent').toggleClass('expand');

(注意开头的.)

...并且我应该注意,对我来说,在Linux版Chrome上,它可以正常工作而不会超时:Example | Source

关于javascript - 新样式何时应用于HTML表单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14260264/

10-13 02:30