2012-06-21 22 views
2

所以我需要一個函數來測試圖像是否可以加載。這是我得到的:將圖像的onError函數轉換爲返回

function imgExists(url){ 
    var img = new Image(); 
    img.onerror = function(){ 
     alert('error') 
    } 
    img.onload = function(){ 
    alert('load') 
    } 
    img.src = url; 
} 

imgExists('http://hashtraffic.com/img/[email protected]') 

問題是,警報被困在他們的功能。我怎樣才能讓imgExists()函數在圖像加載時返回true,如果不加載則返回false?

+6

圖像將異步加載,所以你不能從函數立即返回一個值。您將不得不遵循延遲執行模式,併爲您的函數提供一個回調函數來調用,或讓它返回一個Deferred對象。 –

+0

任何示例?我如何提供回調? – alt

+0

將它作爲參數傳遞給函數,並在得到結果時在函數內部調用它。 –

回答

6

你需要使用一個回調,因爲你的功能本質上是異步的:

function imgExists(url, callback) { 
    var img = new Image(); 
    img.onerror = function() { 
     callback(false); 
    } 
    img.onload = function() { 
     callback(true); 
    } 
    img.src = url; 
} 

function checkImage(exists) { 
    alert("Image exists: " + exists); // Usage example. 
} 

imgExists('http://hashtraffic.com/img/[email protected]', checkImage); 
+0

但這是一個警報,而不是回報。 – alt

+0

@JacksonGariety:'//用法示例.'!需要結果的代碼進入回調。除了「提醒」之外,你可以做任何你想做的事情,例如測試「exists」是否爲「true」或「false」並相應地執行。這就是回調的工作原理。 –

+0

所以在我的代碼的其餘部分,我有'if(imgExists('http:// ...')== true){// etc}'我該如何修改它來檢查回調? – alt