在Chrome上强制.load的任何方法?

时间:2011-07-05 21:28:19

标签: javascript jquery caching google-chrome webkit

我有一个非常简单的功能,即获取图像数据而不是放置它,之后它将运行sizeImages();将按照与浏览器大小成比例调整图像大小的功能。这里的问题是它适用于除Chrome(webkit)之外的所有浏览器。我第一次点击它时正确调整大小,但是在我再次点击它之后它就不会这样做了。所以我问'我有什么选择强迫它起作用吗?

$.get("getBg.php", {
    img: (this).id
},
function(data){
    $("#bg").html(data);
    $("#bgImage").load(function() {
        sizeImages();
    });
});

1 个答案:

答案 0 :(得分:1)

我怀疑这与(如果图像在浏览器缓存中)的问题有关,那么它可能会在创建时立即加载。如果在创建之后附加了“load”处理程序,那么在附加处理程序之前就已经触发了load事件,并且永远不会调用你的加载处理程序。

通常解决此问题的方法是确保您的代码按此顺序排列:

var myImg = new Image();
myImg.onload = myLoadFunc;
myImg.src = "set URL here";

这可确保在可能加载图像之前设置加载处理程序。

您的代码示例肯定容易受到此问题的影响,因为您在附加加载处理程序之前创建了完全指定的图像标记。

大卫的例子可能不起作用,因为“.live”依赖于事件传播,我认为它不适用于加载事件(我认为它主要是为鼠标或键事件设计的)。

如果需要触发load事件,则必须创建图像对象(尚未设置src),附加加载处理程序,然后设置src以确保获得加载事件。也可以创建HTML,然后附加load事件,然后检查图像是否已经加载,如果是,请手动调用load事件,尽管这不像我上面的代码示例那样安全。如果您是从HTML创建图像,那么在HTML中指定onload处理程序也是安全的。