我在歌剧中遇到了一个非常奇怪的错误。请检查以下代码:
$(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会忽略在文档就绪时运行的代码。每个其他浏览器都运行得很好。我想也许它完全忽略了文件的准备,但我用一个警报功能对它进行了测试,发现它每次都有效。似乎虽然它在正常的文档就绪条件下有时会忽略它,但如果我在运行函数之前添加警报,则在警告框中按“ok”时,代码每次都运行正常。出于某种原因,有时用户必须与页面进行交互才能运行。
任何人都知道为什么甚至更好的方法来修复或解决这个问题?请记住,只有在以这种方式设置CSS时才会发生这种情况,并且在窗口调整大小时,代码会完美地执行并按原样显示。
答案 0 :(得分:0)
不确定导致此问题的原因,但将功能包装在window.load()
中已对问题进行了排序。
答案 1 :(得分:0)
根据documentation: “传递给.ready()的处理程序保证在DOM准备好后执行,所以这通常是附加所有其他事件处理程序并运行其他jQuery代码的最佳位置。当使用依赖于CSS样式值的脚本时在引用脚本之前引用外部样式表或嵌入样式元素很重要。“
换句话说,这是在页面的结构准备就绪后立即运行,而不是在加载整个页面(图像,外部链接)时运行。既然你说有时有效,那么这可能是一种竞争条件,当图像加载速度非常快或从缓存中加载时,可能在准备好DOM时准备就绪事件火灾。在您的情况下,当页面上的所有媒体加载时,onload是适当的事件。