如何访问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()
?
答案 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
});
});