0

我在歌剧中遇到了一个非常奇怪的错误。检查以下代码:

$(document).ready(function(){
    var $imgHeight = $('.collection-item-image').width() / 3 * 4;
    $('.collection-item-holder').css('padding-top',$imgHeight + 'px');

    $(window).resize(function(){
        var $imgHeight = $('.collection-item-image').width() / 3 * 4;
        $('.collection-item-holder').css('padding-top',$imgHeight + 'px');
    });
});

有时,Opera 会忽略在准备好文档时运行的代码。每个其他浏览器都可以正常运行。我以为它可能完全忽略了准备好的文档,但是我用警报功能对其进行了测试,发现它每次都有效。似乎虽然它有时会在正常的文档就绪条件下忽略它,但如果我在函数运行之前添加一个警报,在警报框中按“确定”后,代码每次都运行良好。出于某种原因,有时用户必须与页面交互才能运行。

任何人都知道为什么甚至更好的方法来解决或解决这个问题?请记住,这似乎只在以这种方式设置 CSS 时发生,并且在窗口调整大小时,代码会完美执行并按应有的方式显示。

4

2 回答 2

0

根据文档:“传递给 .ready() 的处理程序保证在 DOM 准备好后执行,因此这通常是附加所有其他事件处理程序并运行其他 jQuery 代码的最佳位置。当使用依赖的脚本时CSS 样式属性的值,在引用脚本之前引用外部样式表或嵌入样式元素很重要。”

换句话说,这是在页面结构准备好后立即运行的,而不是在加载整个页面(图像、外部链接)时运行。由于您说它有时会起作用,所以这可能是一种竞争条件,当图像加载速度非常快或从缓存中加载时,它可能会在 DOM-ready 事件触发时准备好。在您的情况下,当页面上的所有媒体都已加载时, onload 是适当的事件。

于 2013-02-17T03:33:50.400 回答
0

不确定是什么导致了这个问题,但是将函数包装在里面window.load()已经解决了这个问题。

于 2013-02-17T03:24:23.267 回答