2013-10-17 31 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