2013-10-09 49 views
-2

好內外部的變量,這是我直到知道:jQuery的使用回調函數

function validate() { 
var validated = true; 

$('.alert-infobox').fadeIn("fast", function(){ 
    $('input.offer').each(function(){ 
     // do ajax code with async = false for each input for validate if something happens 
     validate = false; 
    }); 
}); 

} 

if(validated){ 
    //do something 
} 

return validated; 

現在什麼即時試圖做的是在褪色,在運行褪色爲每個輸入一個AJAX調用後驗證服務器端的輸入,現在驗證的變量總是保持爲真,我相信fadeIn中回調中的指令位於不同的範圍內,有沒有辦法在回調函數之外訪問變量?

對不起一種新的在這裏:)

感謝

+0

範圍不是問題,而是fadeIn是異步的並在修改validate之前返回。 – Musa

+3

我在那裏看到錯字'驗證** d **' – Peter

+0

雖然範圍問題以及他試圖在函數外部調用「驗證」。我不知道如何在這裏幫助你,因爲我不確定你需要這個'validated'變量。 – Colandus

回答

1

validate功能它不是一個不同的範圍。回調將在if語句後執行。

嘗試以下調試代碼:

function validate() { 
    var validated = true; 
    console.log("Before fadeIn"); 
    $('.alert-infobox').fadeIn("fast", function(){ 
     console.log("Callback!"); 
     $('input.offer').each(function(){ 
      // do ajax code with async = false for each input for validate if something happens 
      validated = false; 
     }); 
    }); 
    console.log("After fadeIn"); 
} 

validate(); 

您將獲得以下順序輸出:

Before fadeIn

After fadeIn

Callback!

爲什麼?因爲回調是在動畫完成後調用的,這是大約200 + ms以後。

+1

「嘗試一些調試代碼」是一個普通和基本的評論,但是這麼多PHP和Javascript用戶不這麼做?基本的編程技巧,人。 –

+0

好吧;)但我如何等待回調已經運行,所以我可以在淡入之前使用它? –

+1

您只需將您的代碼放入回調中即可。 – Colandus