2011-11-08 201 views
0

我正在嘗試此代碼來更新醉心插件的回退。 如何訪問第一個函數之外的變量a?我可以重寫該變量來進行更新,是否正確?變量未定義

<script type="text/javascript"> 
$(document).ready(function() { 
    var a ="Login"; 
    $("#login_form").submit(function() { 
     var formdata = $("#login_form").serializeArray(); 
     $.ajax({ 
      url: "ajax_login.php", 
      type: "post", 
      dataType: "json", 
      data: formdata, 
      success: function (data) { 
       if (data.livre === 'complete') { 
        var a ="success"; 
       } else 
        var a = "Error"; 
      } 
     }); 
return false; 
    }); 
}); 
</script> 

<script type='text/javascript'> 
$(document).ready(function() { 
    $('.login_fields input[rel=tipsy]').tipsy({gravity: 'w', trigger: 'manual', fallback: a }); // a is not defined 
}); 
</script> 

回答

1

無法在創建Tipsy對象後不更改fallback屬性,而不會自己創建tipsy plugin本身。

鑑於fallback參數是一個字符串,只要執行$().tipsy({...})函數就會解釋該參數。因此,以後更改變量a的值不會更改fallback參數。

我首先想到的是直接更新從$.fn.tipsy.defaults對象fallback屬性會做到最好的,但創建一個新的Tipsy對象時,該fallback財產基本上覆制它,所以它會存儲fallback初始價值永存。

解決方法之一是分叉Tipsy項目並將fallback屬性更改爲接受字符串或function()。像這樣,它可以做到這樣的事情:fallback: function(){ return a;}

+0

我會用動態內容和淡入淡出來做一個簡單的css工具提示。保持簡單,並解決。謝謝 – Daniel

0

移動a變量準備功能外:

<script type="text/javascript"> 
    var a ="Login"; 
    $(document).ready(function() { 

此外,不要在你的成功的功能使用var關鍵字。您正在重新聲明該變量,而不是設置ready函數開始處定義的變量的值。

success: function (data) { 
      if (data.livre === 'complete') { 
       a ="sucess"; 
      } else 
       a = "Error"; 
     } 
0

您可以使其成爲全球。不管這是你的應該做什麼取決於。

如果它全部在doc中運行,那麼沒有理由擁有一個全局的;你可以從ajax成功的第二個docready中運行代碼(或者完成,如果它滿足你的需要的話)。

很難說;不知道片段與現實有多接近。

3

將第二個document.ready塊內的代碼移動到第一個(這將使您的.tipsy()呼叫可訪問變量a)或使a變量爲全局變量。

<script type="text/javascript"> 
$(document).ready(function() { 
    var a ="Login"; 
    $("#login_form").submit(function() { 
     var formdata = $("#login_form").serializeArray(); 
     $.ajax({ 
      url: "ajax_login.php", 
      type: "post", 
      dataType: "json", 
      data: formdata, 
      success: function (data) { 
       if (data.livre === 'complete') { 
        a ="success"; 
       } else 
        a = "Error"; 
      } 
     }); 
return false; 
    }); 
    $('.login_fields input[rel=tipsy]').tipsy({gravity: 'w', trigger: 'manual', fallback: a }); 

}); 
</script> 

OR

<script type="text/javascript"> 
var a = "Login"; 
$(document).ready(function() { 
    $("#login_form").submit(function() { 
     var formdata = $("#login_form").serializeArray(); 
     $.ajax({ 
      url: "ajax_login.php", 
      type: "post", 
      dataType: "json", 
      data: formdata, 
      success: function (data) { 
       if (data.livre === 'complete') { 
        a ="success"; 
       } else 
        a = "Error"; 
      } 
     }); 
return false; 
    }); 
}); 
</script> 

<script type='text/javascript'> 
$(document).ready(function() { 
    $('.login_fields input[rel=tipsy]').tipsy({gravity: 'w', trigger: 'manual', fallback: a }); // a is not defined 
}); 
</script> 

通知我刪除從您的AJAX調用成功回調var聲明。

UPDATE

要傳遞的a更新值醉意,你需要運行在回調函數的調用.tipsy()。你也可以運行它,你現在的樣子,並在回調函數更新的醉意的插件(但是我不熟悉的插件,我不知道如何做到這一點):

<script type="text/javascript"> 
$(document).ready(function() { 
    var a ="Login"; 
    $("#login_form").submit(function() { 
     var formdata = $("#login_form").serializeArray(); 
     $.ajax({ 
      url: "ajax_login.php", 
      type: "post", 
      dataType: "json", 
      data: formdata, 
      success: function (data) { 
       if (data.livre === 'complete') { 
        a ="success"; 
       } else { 
        a = "Error"; 
       } 
       $('.login_fields input[rel=tipsy]').tipsy({gravity: 'w', trigger: 'manual', fallback: a }); 
      } 
     }); 
return false; 
    }); 
}); 
</script> 
+0

解決了錯誤,但工具提示未更新。永遠是「登錄」,永遠不會改變成功或錯誤。 – Daniel

+0

AJAX調用是異步的,這意味着在調用'.tipsy()'調用之後它執行回調函數。檢查我的更改以便在您的回調函數中加載醉意。另一個解決方案是加載tispy,但是在回調函數中更新它(我個人不知道插件,所以我不知道該怎麼做)。 – Jasper

0

1)你爲什麼有2個Document.ready? 2)您可以使用全局參數或$ .data來轉換數據。 3)爲你的解決方案 - 聲明var a ="Login";外側或使用自我執行功能,它保持全球變種的範圍。