2015-05-26 25 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

希望有所帮助。