2014-03-31 92 views
0

我有一個函數,它定義了一個變量,如果我在函數內部調用它可以正常工作。當我嘗試在功能外使用警報時,它不起作用。什麼做錯了和/或我需要做什麼才能調用/提醒函數以外的函數。謝謝。Jquery調用函數以外的變量

$(function() { 
    $("#MyForm").submit(function(){ 
     $(':input.File').each(function() { 
      $(this).upload(
       'filephp.php', 
       function(success){ 
        var fmsg = success; 
        if(fmsg == "E") {var T = 'left';} 

        }, 
       $('#prog') 
      ) 
      alert(T); 

     }); 
     return false    
    }) 

}) 

正如你可以看到我嘗試設置一個變量「T」,然後提醒它function.I外需要使用變量外的函數做多的形式處理。謝謝。

+0

我不認爲這是可能的,因爲上傳的功能看起來像一個異步一個 –

回答

2

變量T超出範圍。首先在上傳呼叫之外定義它,然後在上傳完成時調用回調函數中的警報。

編輯

var T = ''; 
    ... 
    $(this).upload(
     'filephp.php', 
     function(success){ 
     var fmsg = success; 
     if(fmsg == "E") { 
      T = 'left'; 
     } 
     }, 
     $('#prog') 
    ); 
    alert(T); 
    ... 

這個例子唯一的問題是警戒值是'不「左」,因爲完成上傳時調用回調函數,這是警惕了。所以你必須在成功回調中調用它來獲得正確的價值。

+0

我很新,有沒有可以提供的示例代碼的方法嗎?不熟悉回調函數。謝謝 – user982853

+0

把var T放在外面,就像例子。注意不要覆蓋該值,因爲您有上傳所有文件的每個循環。 –

+0

如果您像之前一樣在函數中聲明變量,則該變量的範圍僅在該函數內;你不能在函數外獲得它的值。但是,如此處所示,如果您在函數之外聲明變量,則可以在該函數內爲其分配一個值,然後在該函數之外訪問該值。 – biddano

0

基本上你必須在你的函數之前設置「T」作爲變量,然後在你的函數中用T =「lol hai」;來重新定義它。

*編輯 - 所以有一些事情不妥: http://jsfiddle.net/vAx6L/2/

就像你和你需要設置變量的函數「fmsg」空白外面太變量「T」一樣。

在jQuery中你可以將其設置爲可變創建函數看到此鏈接: http://learn.jquery.com/javascript-101/functions/

有一些額外的非必需字符檢查有關該錯誤控制檯,小提琴顯示砍下版本你的例子顯然沒有你的上傳庫/插件。

var T; 
var fmsg; 
var newFunction = function(){ 
    fmsg = "E"; 
    if(fmsg == "E"){ 
     T = 'left'; 
    } 
    alert(T); 
}; // no need for a closing ")" here 
newFunction(); // This actually calls the function, should be in your document ready/ document load 
+0

這將返回一個空白值。 – user982853

+0

快速思考,這是否會在ajax完成之前運行警報。如果是這樣,它會帶回空白值。我知道是異步運行我的PHP文件,所以也許它在ajax/var集合完成之前調用警報?只是一個想法,如果我是正確的,有沒有辦法解決這個問題? – user982853

+0

或者也許是因爲我想設置一個變量與成功的數據對象,而不是一個字符串? – user982853