2015-05-26 58 views
0

我想設置一些Js變量來計算一些高度和偏移量,但是我需要在頁面加載B/C後做這些事情我有第三方廣告加載和轉移的東西。

所以這個問題:

我所得到的是:

var sidebarHeight = $('.sidebar').height(), 
    sidebarOffset = $('.sidebar').offset().top; 

但那些不會被正確設置,除非我讓他們這樣的:

$(window).on('load', function(){ 
    var sidebarHeight = $('.sidebar').height(), 
     sidebarOffset = $('.sidebar').offset().top; 
}); 

但問題在於那些變量不是全局變量 - 它們是該函數的本地變量,因此不能被其他函數重用。

那麼問題:我怎樣才能設置它,所以這些變量設置在window.load上,但仍然是全局的,可用於其他功能?

+0

刪除'var'。 –

+1

爲什麼不直接在全局範圍聲明它們並將它們填充到onLoad?要做到這一點,您只需使用第一個示例,而無需分配任務。然後,你將使用第二個例子,沒有var關鍵字(它只是一個賦值給在全局範圍聲明的變量) –

+0

我更喜歡顯式的'window ['sidebarHeight'] = ...',但是我也大寫我的全局'SIDEBAR_HEIGHT';而不是'$(window).on('load''你可能想要做'$(document).on('load'',因爲你真的在文檔內容填充之後,而不是瀏覽器窗口打開。 – vol7ron

回答

1

申報全球:

var sidebarHeight, sidebarOffset; 

本地設置:

$(window).on('load', function(){ 
    sidebarHeight = $('.sidebar').height(); 
    sidebarOffset = $('.sidebar').offset().top; 
}); 

他們不會有他們的聲明,並設定他們,讓其他代碼之間的值,使用它們可能需要考慮的是。但是如果你需要它們在全球範圍內,那麼只需在全球範圍內聲明它們。

2

全局變量是不好的做法,應該避免!

對於你的問題,設置他們全球很容易。您只需將它們附加到窗口,像這樣:

$(window).on('load', function(){ 
    window.sidebarHeight = $('.sidebar').height(); 
    window.sidebarOffset = $('.sidebar').offset().top; 
}); 

或者,只是宣佈他們在全球範圍:

var sidebarHeight, sidebarOffset; 
$(window).on('load', function(){ 
    sidebarHeight = $('.sidebar').height(); 
    sidebarOffset = $('.sidebar').offset().top; 
}); 

但是,我強烈建議避免這一點,也許可以考慮使用一些名稱間距到項目,這樣的事情:

var MY_PROJET_NAMESPACE = MY_PROJET_NAMESPACE || {}; 
$(window).on('load', function(){ 
    MY_PROJET_NAMESPACE.sidebarHeight = $('.sidebar').height(); 
    MY_PROJET_NAMESPACE.sidebarOffset = $('.sidebar').offset().top; 
}); 

這將防止全局命名空間污染(你只會對全球範圍內一個全局變量)

+0

謝謝,修正.. –

1

我有兩種方法可以完成這個任務。

第一種方式: 您只需在globalScope中聲明變量,但不指定任何值。然後,在你的onLoad分配值給他們,就像這樣:

var sidebarHeight; 
var sidebarOffset; 
$(window).on('load', function(){ 
    sidebarHeight = $('.sidebar').height(); 
    sidebarOffset = $('.sidebar').offset().top; 
}); 

第二個方法(我的最愛): 您可以創建窗口對象本身的附加屬性。由於窗口對象的引用是全局的,所以你的額外屬性也是如此。像這樣做:

$(window).on('load', function(){ 
    window.sidebarHeight = $('.sidebar').height(); 
    window.sidebarOffset = $('.sidebar').offset().top; 
}); 

而且無論你再需要一個值,你可以閱讀window.sidebarHeightwindow.sidebarOffset

希望有所幫助。