从Javascript函数返回变量

时间:2012-08-19 21:17:14

标签: javascript jquery

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

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

背景信息:来自this SO question我认为在imgWidth方法之外定义了load(),   它总是在load()之外可用。这让我   想知道为什么定义imageWidth而不是load()

3 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:3)

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

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