【发布时间】:2011-05-21 22:28:22
【问题描述】:
我需要使用动态创建的图像标签来获取图像的尺寸。有用。但仅使用 attr('width') 并且仅当我不将图像添加到 DOM 时。否则,返回的尺寸为零。为什么? :)
this.img = $('<img/>', {'src': e.url} ); // generate image
this.img.appendTo('body'); // add to DOM
this.img.load(function(self){return function(){ // when loaded call function
console.log(self.img.attr('src'));
console.log(self.img.attr('width'));
console.log(self.img.width());
console.log(self.img.css('width'));
}; }(this) ); // pass object via closure
所以我生成图像,将其添加到 DOM 并定义一个处理函数,以便在加载图像时调用。我正在使用闭包向它传递对原始对象的引用,在闭包中称为“self”。我正在转储图像的 URL 以确保引用是正确的。输出是:
pic.jpg
0
0
0px
现在这是 奇怪 的事情:如果我删除上面的第二行(appendTo),那么它会突然起作用,但仅适用于 attr('width'):
pic.jpg
1024
0
0px
这种行为对我来说没有任何意义。我希望在上述所有六种情况下都能获得实际的图像尺寸。我现在知道如何解决这个问题,但我想了解它为什么会发生。它是一个错误吗?还是有什么合乎逻辑的原因?
以上结果适用于 Safari。我刚刚使用 Chrome 进行了测试,在第一个示例中我得到了所有正确的值,但在第二个示例中仍然是两个零。很奇怪。
【问题讨论】:
-
你确定你总是有一个有效的 e.url 吗??
-
@travel boy 你能不能给这个变量取个别的名字来代替 img this.img , this.newImgSource 等等...///
-
@travelboy & gov:同意,保存图像的 jQuery 对象的属性应该更改为 img 是一个标签名称,只是一个好习惯。
-
@gov:我将 img 重命名为 ximg 并没有改变任何东西。是的,e.url 是有效的,并且在所有测试中都是相同的。
-
@travelboy 我们可以做我下面建议的例子吗//只是为了一一消除。
标签: javascript jquery css image dimensions