我需要编写一个函数,我可以在普通js中设置一个全局变量,用jQuery函数更新它的值,然后将通过jQuery函数更新的值分配给普通的javasciprt变量。
以下是代码示例:
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 :(得分:3)
因为您只在foo
上更新ready event
,但是你想要在准备好的火灾之前记录
试试这个
jQuery(document).ready(function ($) {
// jquery function that updates the variable
foo = 'updated by jquery';
console.log(foo);
});
答案 1 :(得分: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
});
答案 2 :(得分:0)
您的代码实际上应该正常工作。但是如果我们按顺序使用注释作为标记(所以#2 =“//更新变量的jquery函数”),请记住它将按[#1,#3,#2]的顺序运行,因为准备好了当文档准备就绪时,()函数将在其他函数之后运行。
只要需要foo的任何代码在准备好的函数之后运行,它应该正确读取它。