访问$(document).ready()和jquery之外的变量

所以我有一个包含在我的HTML中的.js文件

如果我把它放在我的.js文件中,

$(document).ready(function(){ var siteRoot = $('.site-root').val(); alert(siteRoot); }); 

代码会正确地提醒值,但如果我这样做:

 var siteRoot = $('.site-root').val(); $(document).ready(function(){ alert(siteRoot); }); 

它会警告undefined而不是

有没有办法让$(document).ready()访问变量以外的变量,因为如果我把变量放在$(document).ready() ,它将无法从其他js文件访问

您可以将其设为全局:

 // this is the same as your example, // just wanted to stress that it's a part of the window (global) object window.siteRoot = $('.site-root').val(); $(document).ready(function(){ alert(window.siteRoot); }); 

或者甚至更好,使用某种命名空间,如下所示:

 var MyData = {}; MyData.siteRoot = $('.site-root').val(); $(document).ready(function(){ alert(MyData.siteRoot); }); 

执行此操作的最佳方法是基本上创建一个空的全局变量或创建一个名称空间来存储变量。 然后在document.ready中,只需将$('.site-root').val()到该变量中。

 var siteRoot = ''; $(document).ready(function(){ siteRoot = $('.site-root').val(); alert(siteRoot); }); 

这样您就可以在知道.site-root存在之后设置siteRoot变量,并且它在整个应用程序中全局可用。

该变量可以从$(document).ready(因为它是全局的,但是您可能undefined因为在文档准备好之前没有.siteRoot值可用。只需尝试:

 var siteRoot = "blahblah"; $(document).ready(function(){ alert(siteRoot); }); 

现在,如果您希望全局可以使用该值并立即在应用程序的其他部分使用,则必须重新使用您的解决方案,以便应用程序的其他部分仅在DOM使用时才使用它准备好了。

然而你可以通过做这样的事情来分享:

 $(document).ready(function(){ window.siteroot = $('.site-root').val(); }); 

在整个应用中,您可以通过以下方式参考:

 if (typeof(window.siteroot) !== "undefined") { //do this } 

你也可以懒加载它:

 window.get_siteRoot = function() { if (typeof(window.siteroot) !== "undefined") return window.siteroot; var val = $('.site-root').val(); window.siteroot = val; return window.siteroot; } 

HTH。