2

如何访问 的值imgWidth?这是给我undefined的。

somejQueryMethod(function() { 
    var imgWidth;
    $("<img/>").attr(
        "src", 
        $("#SomeImgSelector").attr("src")
    ).load(function() {
        imgWidth = this.width;
    });
    // use imgWidth here
    // imgWidth is undefined here
});

背景信息:从这个 SO question我假设,正如在方法imgWidth之外定义的那样load(),它总是可以在load(). 这让我想知道为什么定义imageWidththere 而不是 in load()

4

3 回答 3

7

您不能在那里使用该值,因为它还不存在。命令中的回调函数在load内容加载后运行,并且发生在使用load命令的函数结束之后。

将需要该值的代码放入load命令的回调函数中:

...somejQueryMethod(
    function() { 
        var imgWidth;
        $("<img/>").attr("src", $("#SomeImgSelector").attr("src")).load( function() {
          imgWidth = this.width;
          // use imgWidth here
        } );
    }
);
于 2012-08-19T21:21:29.557 回答
4

你的问题对我来说没有多大意义。您不能在那里使用它,因为它还没有值 - 您应该在定义负载处理程序函数内或之后使用它。

编辑:只是补充一下,花点时间想想你在做什么。当您更改 src 属性时,您是在告诉它从某个 url 加载图像。然后,您将附加一个加载事件以触发(当它完成加载时)以捕获加载图像的宽度。现在,在代码完成加载图像之前,您当然不能使用该值。在这里,您使用的是异步加载,这实际上意味着您的代码将被处理到最后,并且加载将“同时”发生,因此它不会等待图像加载完成。如果你愿意,你也可以改变你的代码,让它真正等待它完成,或者你可以在负载处理程序中使用宽度,正如其他人所展示的那样。

于 2012-08-19T21:21:00.933 回答
3

load函数是异步的,这意味着您需要在回调函数中提供所有功能。

somejQueryMethod(function() {         
    $("<img/>").attr(
        "src", 
        $("#SomeImgSelector").attr("src")
    ).load(function() {
        var imgWidth = this.width;
        // use imgWidth here
    });
});
于 2012-08-19T21:24:05.813 回答