我需要使用動態創建的圖像標記獲取圖像的尺寸。有用。但只使用attr('width'),只有當我不把圖像添加到DOM。否則,返回的尺寸爲零。爲什麼? :)jQuery:添加到DOM的新圖像在加載後總是具有寬度0
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」。我正在傾倒圖片的網址以確保引用無誤。輸出是:
pic.jpg
0
0
0px
現在這裏是奇怪的事情:如果我刪除上方(appendTo)的第二行,然後它突然的作品,但僅限於ATTR(「寬」):
pic.jpg
1024
0
0px
這種行爲對我沒有任何意義。我期望在以上所有六種情況下獲得實際的圖像大小。我現在知道如何解決這個問題,但我想知道爲什麼會發生這種情況。這是一個錯誤嗎?還是有一些合乎邏輯的原因呢?
以上結果適用於Safari。我只用Chrome進行了測試,在第一個例子中我得到了所有正確的值,但在第二個例子中仍然是兩個零。很奇怪。
你確定你總是有e.url有效的嗎? – kobe 2010-12-07 23:52:02
@travel男孩你可以給這個變量一些其他的名字,而不是img this.img,this.newImgSource左右...... /// – kobe 2010-12-08 00:02:10
@travelboy&gov:同意,應該改變圖像的jQuery對象的屬性因爲img是標籤名稱,只是良好的做法。 – UpHelix 2010-12-08 00:27:26