2012-02-09 53 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); 

它返回未定义

我不明白为什么会发生这种情况,即使我已经在全局声明比率变量。

我用这个在以下为例:

工作http://jsfiddle.net/7sUAY/5/

不工作http://jsfiddle.net/7sUAY/6/

谢谢 Mugur

+1

由于'load'回调仅在图像加载时执行,而$(“”).attr()。load()'后面的每个代码立即执行。否则,根本没有提供回调的原因是什么?当然是 – 2012-02-09 11:34:32

+0

!谢谢! – Mike 2012-02-09 11:37:05

回答

2

你只值赋给ratio内一个回调(传递给加载函数)。这个回调将在图片加载完成后进行。在ratio处于提醒状态,因此ratio保持未定义状态之前,不会发生此情况。

请参阅here for the load method文档。

+1

好点。错过了。谢谢! – Mike 2012-02-09 11:36:52

2

这是因为​​方法需要更多时间。您的警报执行速度比图片加载速度快。