2012-11-17 234 views
2

我得到了这条线在我的javascript:等待加载

$("#botbg").css("background-image", "url(/png/" + epage + ".jpg)"); 

“botbg”是一个div。 是否可以附加回调函数?我只是希望其他操作等待完成。

这些succesfull的werent:

$("#botbg").css("background-image", "url(/png/" + epage + ".jpg)").load(function(){ 
//... 
}); 

$("#botbg").css("background-image", "url(/png/" + epage + ".jpg)").one("load", function(){ 
//... 
}); 

$("#botbg").css("background-image", "url(/png/" + epage + ".jpg)").ready(function(){ 
//... 
}); 

回答

0

不,你不能。

你能做的最好的事情是加载一个临时DIV中的图像,然后用当负载回调被称为像这样设置背景图片:

<div id="tmp"><img src="/png/yourimage.jpg" /></div> 

$("#tmp").load(function(){ 
    $("#botbg").css("background-image", "url(/png/yourimage.jpg)"); 
}); 

编辑

新途径调用.load()函数

<div id="tmp"><img src="/png/yourimage.jpg" /></div> 

$("#tmp").on("load", function() { 
    $("#botbg").css("background-image", "url(/png/yourimage.jpg)"); 
}); 
+0

虽然这种解决方案可能会奏效它不建议,因为[负载()](http://api.jquery.com/load-event/)是** **已过时,它不能一致地工作,也不能可靠地跨浏览器。 – Bogdan

+0

好的,我不知道,我已经更新了我的答案。这个帖子http://stackoverflow.com/questions/12643160/load-method-deprecated – sdespont

+0

你不只是测试,如果div _tmp_已加载,而不是测试如果img已加载? – Bruno

0

在jQuery中,回调函数仅适用于asynchronous任务,并且由于css函数是​​函数,因此不存在回调函数,因此您在.css()函数后面添加的每行代码都将立即调用。

但是,您可以跟踪背景图片的负载,但即使这样做也无法保证您的代码会在图片显示后执行,特别是在大图片中,浏览器需要一些时间才能执行图片render图片。要跟踪,如果你的图像加载,你可以做类似如下:

$img = $('<img src="/png/'+epage+'.jpg" id="myImg"/>');//now it will work 
$img.bind('load',function(){ 
    $("#botbg").css("background-image", "url(/png/" + epage + ".jpg)"); 
}); 

这里有一个功能fiddle

我希望它有帮助。干杯

+0

我在回调后发出警报..它不会触发:S –

+0

对不起,我会编辑以使其正确。哑我忘了一个重要的细节 –

2

尝试

var img = new Image(); 
img.src = url; 
img.onload = function() { 
    $("#botbg").css("background-image", "url(" + url + ")"); 
} 
+0

“function(){”不发射:S –

+0

@BigX_Jazz它在我的小提琴[**这里**](http://jsfiddle.net/aqRYF/1/) – Bruno