2012-02-09 2 views
0

私はjqueryの中にこのコードを持っている:jqueryの変数のスコープ

var ratio; 
$("<img/>").attr("src", $(img).attr("src")).load(function() { 
ratio = this.width/this.height; 
    alert(ratio); 
}); 

これは正しい比率をretunsが、私はこの

var ratio; 
$("<img/>").attr("src", $(img).attr("src")).load(function() { 
ratio = this.width/this.height;   
}); 
alert(ratio); 

をしようとすると、それは未定義を返します。

私はratio変数をグローバルに宣言したにもかかわらず、なぜこれが起こるのか分かりません。

私は、次のexempleでこれを使用します。

http://jsfiddle.net/7sUAY/6/

を働いていないhttp://jsfiddle.net/7sUAY/5/

を作業にのみ、内部ratioに値を割り当てる、 Mugur

+1

'load'コールバックはイメージがロードされたときにのみ実行されるので、' $( "").attr()。load() 'の後のすべてのコードは直ちに実行されます。それ以外の場合は、コールバックを提供する理由は何でしょうか?もちろん –

+0

!ありがとうございました! – Mike

答えて

2

をありがとうコールバック(ロード関数に渡されます)。このコールバックは、イメージがロードされたときに行われます。 ratioが警告されてからratioが未定義のままになる前には作成されません。

here for the load methodを参照してください。

+1

良い点。それを逃した。ありがとうございました! – Mike

2

これは、​​メソッドに時間がかかるためです。あなたのアラートは、イメージが読み込まれたよりも速く実行されます。