2012-03-26 3 views
0
<script type="text/javascript" src="jquery-1.7.2.js"></script> 
<script type="text/javascript"> 

var mySite={}; 

mySite.title=$('h1'); 
mySite.makeRed= function(){ 
return mySite.title.css('color','red'); 
}; 


$(document).ready(function() { 

mySite.makeRed(); 


}); 


</script> 

おはよう。関数内で呼び出されたメソッドが何も返さないのはなぜですか?Jqueryとjavascriptのスコープ

+0

あなたの質問を説明できますか? –

+0

返品はどういう意味ですか?タイトルセレクターに問題があります。 'mySite.title = $( 'h1');'はDOMが準備ができていないので、この時点で 'h1'要素を選択しません。その要素を選択できるようにするには、 '$(document).ready()'ハンドラの中になければなりません。 – Shef

答えて

1

これらのスクリプトタグがドキュメントのHEADにあるとします。

準備ができハンドラ外でこれを行うと:

mySite.title=$('h1'); 

要素h1は、おそらくDOMにはまだ存在しません。これはレディハンドラの目的です:DOMが動作する準備ができていることを確認してください。

本文の末尾(</body>タグの直前)にスクリプトタグを移動することもできます。これは、DOMが逐次的に解析されるため、レディハンドラと同じ結果になります。

または、準備ができているハンドラ内でH1要素を取得できます。

+0

+1。それが問題です。 :) – Shef

+0

私は初期化してからロードするとメソッドを呼び出すことができますか? – DevX

+0

* ...( ' 'タグの直前)本文の末尾にスクリプトタグを移動します。 –

0

スペルミスがあります。

var mySite={}; 

mySite.title=$('<h1/>').html("Hello World"); // Set some text and create the tag tag! 

mySite.makeRed= function(){ 
return mySite.title.css('color','red'); 
}; 


$(document).ready(function() { 



    $("body").append(mySite.makeRed()); // Append it to the dom 

});​ 

http://jsfiddle.net/eZzYz/1/