【问题标题】:jquery variable scopejquery变量范围
【发布时间】:2012-02-09 11:31:35
【问题描述】:

我在 jquery 中有这段代码:

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

这会重新调整正确的比例,但是当我尝试这个时

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

它返回未定义。

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

我在下面的例子中使用它:

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

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

谢谢你, 穆古尔

【问题讨论】:

  • 因为load 回调仅在图像加载时执行,而$("&lt;img/&gt;").attr().load() 之后的每个代码都会立即执行。否则,提供回调的原因是什么?

标签: jquery variables scope


【解决方案1】:

您只能在回调中为ratio 赋值(传递给加载函数)。该回调将在图像加载后进行。它不会在ratio 被警告之前生成,因此ratio 仍然未定义。

请参阅here for the load method 文档。

【讨论】:

    【解决方案2】:

    这是因为.load() 方法需要更多时间。您的警报执行速度比图像加载速度快。

    【讨论】:

      猜你喜欢
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 2012-10-04
      相关资源
      最近更新 更多