javascript - jquery.width returnerar 0 på bild
Jag använder en kod som ser ut så här:
img.load(function(){
// do some stuff
$(this).width();
});
I min återuppringning är bildstorleken alltid 0. Det kan ha något att göra med det, men mina bilder är lokalt laddade.
Men i verkligheten, om jag gör detta.width, kommer jag att få den förväntade bredden och sedan kan jag göra någon form av beräkning härifrån för att ändra mitt extjs-fönster.
Efter några försök inser jag att om jag gör $ (detta) verkar det som att alla attribut jag ändrar inte har någon effekt alls.
att göra $ (this).width(40); kommer inte att ändra bredden på min bild men att göra this.width=40 kommer att ändra bredden på min bild. Det är som om att göra $ (this) kopierade mitt HTMLImageElement inom ett nytt element och dessa ändringar skulle bara tillämpas om jag lade till det i DOM igen för att ersätta det gamla.
Jag är inte så säker på att förstå vad som pågår där.
Redigera
Det här är vad min img-variabel innehåller.
img = $('<img>');
img.attr('src', '....image');
Redigera 2
Detta förändrar egentligen inte det faktum att jQuery inte hanterar bildstorlek för bilder i minnet, men jag tyckte att det skulle vara bra för alla som använder Extjs att inte upprepa mitt misstag. Ett av de stora problemen i mitt fall är att img-objektet jag använde var ett giltigt objekt, men eftersom jag använder ExtJs gjorde jag av misstag ett dumt misstag. Jag skapade mitt fönster på det sättet...
Ext.create('Ext.Window',
// some settings
items: [{
html: img.wrap('<div>').parent().html(),
// etc
Med andra ord, händelsen jag skapade var på img, men jag lade aldrig riktigt till img i DOM. ExtJs lade till HTML-text i DOM som skapade ett nytt objekt som inte kan ändras genom händelsen och så vidare.
Så jag måste skapa ett id för att hitta det nya elementet och allt detta måste göras efter att ett anrop till modalWindow.show() har gjorts. Efter det fungerar allt perfekt.
För att ändra storlek på fönstret, om dimensionerna är inställda, kan du återställa dem till null och göra ett doLayout-anrop på fönstret och det kommer att räkna om fönsterstorleken.
Svar #1
Du upptäckte att jQuery(this).width() inte fungerar för bilder i minnet. Valen är att använda this.width/height eller att lägga till den på sidan och läsa den.
Svar #2
Jag tycker att du borde prova detta...
$("img").load(function(){
// do some stuff
$(this).width();
});
förutsatt att du bara använder img-taggen. om du har id för img-taggen då bör du använda t.ex. $ ("#idimg).load(fun...... forts.)
