访问$(document).ready()&之外的变量jQuery的

时间:2011-08-13 02:57:33

标签: javascript jquery dom

所以我有一个包含在我的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文件访问

4 个答案:

答案 0 :(得分:18)

您可以将其设为全局:

// 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);
});

答案 1 :(得分:3)

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

var siteRoot = '';

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

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

答案 2 :(得分:2)

变量 可以从$(document).ready(内获取,因为它是全局变量,但您可能会获得undefined,因为.siteRoot之前没有值可用文件准备好了。试试这个:

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

现在,如果您希望某个值可用于该变量全局,并且立即使用可用于应用程序的其他部分,则必须重新运行解决方案,以便应用程序的其他部分仅在DOM准备就绪时才使用它。

答案 3 :(得分:0)

然而,您可以通过这样的方式分享:

$(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。