【问题标题】:Use a variable outside anonymous function在匿名函数外使用变量
【发布时间】:2013-06-27 22:55:25
【问题描述】:

我尝试了在这里找到的所有解决方案,但没有一个对我有用..

var img = $("#img");
var width, height;
$("<img/>")
    .attr("src", $(img).attr("src"))
    .load(function() {
        width = this.width;
        height = this.height;
                alert(width + "*" + height) ; // works
    });
alert(width + "*" + height) ; // undifined*undifined !! :(

如你所见,我需要使用外面的高度和宽度...

我重复:我尝试了 StackOverFlow 的 6-7 个解决方案! 也许我没有做好它们……反正它们没有用。

我该怎么办? Tnx。

【问题讨论】:

  • 解决方法是:不要在回调外使用heightwidth。变量的所有使用都应该放在load 回调函数中,它可能会在几秒钟内不会触发。如果您有一些代码需要使用heightwidth,请将all 的代码放在回调中。如果您无法将代码放入回调中,请提供更多上下文以准确解释为什么不能。

标签: jquery function height width


【解决方案1】:

您可以将一个对象传递给您的匿名回调函数,并在回调中设置将在其外部“看到”的属性:

var img = $("#img");
var dimensions = { width: 0, height: 0 };

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

// Some time later, after callback has definitely fired...
alert(dimensions.width + "*" + dimensions.height);

但是作为@apsillers cmets,第二个警报不会按原样工作,因为它会在您的匿名函数被调用之前执行。请记住,jQuery 的所有load() 函数所做的只是接受匿名函数定义 作为其参数并记住它以供以后使用。它是否以及何时调用该函数完全取决于 jQuery。

【讨论】:

  • 为了 OP 的利益:“一段时间后”的示例可能在事件处理程序中,例如需要使用维度的 click 侦听器。
  • 这个答案有帮助吗?如果是这样,请随时将其标记为正确:)
猜你喜欢
  • 2014-04-09
  • 2020-08-19
  • 2017-02-17
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多