2011-08-13 43 views
9

讓我有被列入我的HTML .js文件

如果我把這個在我的.js文件,

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

代碼將正確地提醒值,但如果我這樣做:

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

它會提醒不確定的,而不是

有辦法有東西是在外面$(document).ready()訪問變量,因爲如果我把這個變量中$(document).ready()它不會是從其他js文件訪問

回答

16

您可以使其成爲一個全球性:

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

你能給我一個名字空間方法的例子嗎 –

+0

你去了哪裏,這只是一種將東西放到一個對象中的方式 –

+0

Facepalm。是的,這是一個非常優雅的方式來持久對象,沒有一長串全局聲明。幫助很多。 – eggmatters

2

變量$(document).ready(,因爲它是一個全球範圍內的,但你可能是GE因爲在文檔準備就緒之前,.siteRoot沒有可用的值。剛剛嘗試這一點:

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

現在,如果你期望的值可用於該變量全球併爲您的應用程序的其他部分立即使用,你將不得不重新工作,你的解決方案,例如只有當DOM準備就緒時,應用程序的其他部分也會使用它。

0

不過你可以做這樣的事情分享:

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

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

並在整個應用程序,你可以通過引用它

HTH。

+1

最後3行可以是'return window.siteroot = $('。site-root')。val()' –

3

這樣做的最好方法是基本上創建一個空的全局變量或創建一個名稱空間來存儲變量。然後在document.ready中添加你的$('.site-root').val()到那個變量。

var siteRoot = ''; 

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

您設置的siteRoot變量,你知道.site根存在,這是全球範圍內提供整個應用程序後的方式。

相關問題