使用匿名函数之外的变量

时间:2013-06-27 14:39:50

标签: jquery function height width

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

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。

1 个答案:

答案 0 :(得分: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发表评论时,第二个警报将无法正常工作,因为它会在您的匿名函数被调用之前执行。请记住,所有jQuery的load()函数正在接受一个匿名函数定义作为其参数,并在以后记住它。如果它曾经调用过那个函数,那完全取决于jQuery。