2013-06-27 80 views
0

我試過,我發現這裏的所有解決方案,但沒有對我的作品外..使用可變匿名函數

var img = $("#img"); 
var width, height; 
$("<img/>") 
    .attr("src", $(img).attr("src")) 
    .load(function() { 
     width = this.width; 
     height = this.height; 
       alert(width + "*" + height) ; // works 
    }); 
alert(width + "*" + height) ; // undifined*undifined !! :(

正如你所看到的,我需要使用高度&寬度外...

我重複:我試圖從StackOverFlow 6-7解決方案!也許我沒有做好他們......反正他們沒有工作。

我該怎麼辦? Tnx。

+1

解決方法是:不要在回調之外使用'height'和'width'。所有對變量的使用都應該放在'load'回調函數中,該函數可能不會在幾秒鐘內觸發。如果你有一些代碼需要使用'height'和'width',那麼把*代碼中的所有代碼放在回調中。如果你不能把你的代碼放在回調中,請提供更多的上下文來解釋你爲什麼不能。 – apsillers

回答

1

可以傳遞一個對象到您的匿名回調函數,並設置將被「看到」外面的回調中的屬性:

var img = $("#img"); 
var dimensions = { width: 0, height: 0 }; 

$("<img/>") 
    .attr("src", $(img).attr("src")) 
    .load(function(dimensions) { 
     dimensions.width = this.width; 
     dimensions.height = this.height; 
     alert(dimensions.width + "*" + dimensions.height); 
}); 

// Some time later, after callback has definitely fired... 
alert(dimensions.width + "*" + dimensions.height); 

但作爲@apsillers意見,對第二警報將無法正常工作是因爲它在之前得到執行你的匿名函數被調用。請記住,所有jQuery的load()函數在做的是接受一個匿名的函數定義作爲它的參數並記住它以後。這完全取決於jQuery是否曾經調用過該函數。

+0

對於OP的好處:「稍後一段時間」的例子可能在事件處理程序中,例如需要使用維度的「click」偵聽器。 – apsillers

+0

這個答案有幫助嗎?如果是這樣,請隨時將其標記爲正確:) –