2013-10-17 32 views
1

我需要編寫一個函數,可以在普通js中設置全局變量,使用jQuery函數更新其值,然後將通過jQuery函數更新的值分配給正常的javasciprt變量。使用Jquery更新全局JS變量並返回該值

下面是代碼示例:

var foo; // global variable in plain js 
var bar; // second global variable 
jQuery(document).ready(function ($) { 

    // jquery function that updates the variable 
    foo = 'updated by jquery' 

}); 

bar = foo; 

console.log(bar); // console should read 'updated by jquery' but it says undefined 
+0

'foo'將加載DOM時,被更新,因爲它是在的document.ready()函數。然而,'console.log'會在頁面加載之前立即執行 – Bryan

+0

我該如何完成這項工作?因爲我需要傳遞jquery所做的更改並更新全局變量。 – n00b3

回答

3

因爲要更新的fooready event但你綁到日誌就緒閃光之前

試試這個

jQuery(document).ready(function ($) { 
// jquery function that updates the variable 
    foo = 'updated by jquery'; 
    console.log(foo); 
}); 
+0

這不能解決我的問題,因爲我正在嘗試更新全局變量,並且我需要該更改在該函數運行後可用。 – n00b3

+0

@ n00b3,最初分配一些默認值。像'var foo ='yes';' –

+1

@ n00b3它在函數運行後可用。這個問題是,直到jQuery的'DOMReady'事件觸發,該函數才運行。如果您更快需要它,請從'DOMReady'解開它,或延遲需要該變量的函數,直到DOMReady事件觸發。 – Todd

0

您的代碼實際上應該正常工作。但是,如果我們按順序使用註釋作爲標記(因此#2 =「//更新變量的jquery函數」),請記住它將以[#1,#3,#2]的順序運行,因爲ready ()函數將在文檔準備就緒後運行。

只要任何需要foo的代碼正在運行就緒後,它應該正確讀取它。

+0

如何更改此代碼,以便在函數運行後獲取更新後的值? – n00b3

+0

...你不必改變它。函數運行後,您會獲得更新後的值。但是這個函數比你想象的要晚*運行*中間部分只在文檔準備就緒後運行,但外部代碼塊(在函數的上面和下面)將在此之前執行。一種替代方法是將變量設置爲該函數外的值,如果您需要立即使用它的值。 – Katana314

1

它不會將值設置爲「由jquery更新」,因爲該更新將在文檔準備就緒時發生,而您的console.log(foo)是全局的一部分,它將按順序先於文檔就緒函數調用發生。

所以,從本質上講,

var foo; // #1 
$(function ($) { 
    foo = 'updated by jquery'; 
    console.log(foo); // output : updated by jquery //#3 
}); 

console.log(foo); // output : undefined //#2 

和執行的順序是#1,#2,#3

所以,如果你需要更新的價值,你將需要訪問它文檔.ready中的點#3已被更改後。或者你也可以提高/次價值已使用jQuery的事件,如改變觸發一個事件 -

foo='updated'; 
var event = jQuery.Event("myEvent"); 
$('body').trigger(event); 

// The following can now be outside of document ready 
$('body').on('myEvent',function(){ 
    // Access updated foo value here 
}); 
+0

感謝您的重播。是的,我明白這一點,我如何改變這個,所以我得到一個由函數更新的返回值?該功能不需要運行在document.ready – n00b3

+0

你可以使用事件來做到這一點,檢查我的更新答案 – Vandesh