2011-08-13 20 views
9

の外で変数にアクセスするので、私は

$(document).ready(function(){  
     var siteRoot = $('.site-root').val(); 
     alert(siteRoot); 
}); 
、私は私の.jsファイル内にこれを置けば、私のhtml

に含まれている.jsファイルを持っています

コードが正しく値を警告だろうが、私はこれを行う場合:

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

をではなく

を未定義警告するがあります私は$(document).ready()内の変数を置けば、それはあなたがそれをグローバルにすることができますいずれか

答えて

16

jsの他のファイルからアクセスできないため、それ外$(document).ready()アクセス変数に何か持つ方法:

// 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の値が利用できないため、undefinedと表示されます。ただ、この方法を試してください。

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

を今、あなたは値がのために利用できることを期待している場合、その変数グローバルし、アプリケーションの他の部分ですぐに使用のために、あなたはあなたのソリューションは、このような再作業する必要がありますアプリケーションの他の部分も、DOMの準備が整ったときにだけそのアプリケーションを使用します。

0

しかし、あなたはこのような何か実行して共有することができます:あなたは、それは怠惰な負荷も

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

できます:経由

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

、アプリを通じて、あなたがそれを参照できるの

window.get_siteRoot = function() { 
    if (typeof(window.siteroot) !== "undefined") 
     return window.siteroot; 

    var val = $('.site-root').val(); 
    window.siteroot = val; 
    return window.siteroot; 
} 

HTH。

+1

最後の3行は 'return window.siteroot = $( '。site-root')とすることができます。 –

3

これを行う最も良い方法は、基本的に空のグローバル変数を作成するか、変数を格納する名前空間を作成することです。次にdocument.readyでその変数に$('.site-root').val()を追加します。

var siteRoot = ''; 

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

あなたは.siteルートが存在することがわかっているし、それがアプリケーション全体でグローバルに使用された後、あなたはsiteRoot変数を設定するこの方法。