2012-06-27 15 views
6

używam kodu, który wygląda tak:jquery.width return 0 na obrazek

img.load(function(){ 
    // do some stuff 
    $(this).width(); 

}); 

W moim zwrotnego rozmiar obrazu jest zawsze 0. To może mieć coś wspólnego z tym, ale moje zdjęcia są ładowane lokalnie.

Ale w prawdzie, jeśli robię this.width, będę uzyskać oczekiwaną szerokość i wtedy mogę zrobić jakiś obliczeń stąd zmienić moje okno ExtJS.

Po kilku próbach, zdaję sobie sprawę, że jeśli to zrobię $ (this) wszystkie atrybuty I zmiany nie wydają się mieć żadnego wpływu w ogóle.

Wykonanie $(this).width(40); nie zmieni szerokości mojego obrazu, ale zmiana this.width = 40 zmieni szerokość mojego obrazu. To tak, jakby robi $(this) kopiuje mój HTMLImageElement ramach nowego elementu i te zmiany zostaną zastosowane tylko wtedy, dodałem do Domu ponownie, aby zastąpić starą.

nie jestem tak pewny, aby zrozumieć, co się tam dzieje.

Edit

To właśnie moja zmienna img zawiera.

img = $('<img>'); 
img.attr('src', '....image'); 

Edycja 2

To naprawdę nie zmienia faktu, że jQuery nie obsługuje rozmiar obrazu w pamięci obrazy, ale czułem, że byłoby dobrze dla wszystkich osób korzystających z ExtJS aby nie powtórzyć mój błąd. Jednym z największych problemów w moim przypadku jest to, że obiekt, którego użyłem był prawidłowym obiektem, ale ponieważ używam ExtJs, przypadkowo popełniłem głupi błąd. Tworzę okna w ten sposób ...

Ext.create('Ext.Window', 
    // some settings 
    items: [{ 
     html: img.wrap('<div>').parent().html(), 
    // etc 

Innymi słowy, wydarzenie stworzyłem był na img, ale nigdy naprawdę dodaje img do DOM. ExtJs dodał tekst HTML do DOM, który utworzył nowy obiekt, który nie może być modyfikowany przez zdarzenie i tak dalej.

Tak więc muszę utworzyć identyfikator, aby znaleźć nowy element i wszystko to musi zostać wykonane po zakończeniu połączenia pod numerem modalWindow.show(). Po tym wszystko działa idealnie.

Aby zmienić rozmiar okna, jeśli wymiary są ustawione, można ustawić je ponownie na null i wykonać wywołanie doLayout w oknie, a następnie ponownie obliczyć okienko.

+1

możesz pisać związane HTML? Ponadto, nie trzeba jQuery do tego. Powinieneś być w stanie uzyskać dostęp do właściwości w prostej javascript – pixelbobby

+1

Czym dokładnie jest wartość zmiennej 'img' w tym kodzie? Czym jest ona ustawiona? – Pointy

+0

Pierwszym parametrem [.load() '] (http://api.jquery.com/load/) powinien być adres URL, który chcesz wczytać, a następnie pełna funkcja. Czym jest "img"? – sachleen

Odpowiedz

3

Znaleźliście się, że jQuery(this).width() nie działa dla zdjęć w pamięci. Wybory mają na celu użycie this.width/height lub dołączenie go do strony i odczytanie.

+0

, więc utknąłem z wykorzystaniem this.width i this.height, ponieważ nie mogę go ponownie dodać do strony? –

+0

Tak, musisz użyć this.width, możesz użyć attr(), jeśli naprawdę chcesz. To nie jest wielka sprawa. – epascarello

+0

Tak sądzę, widziałem komentarz na temat jQuery.width, który pochodzi z zeszłego roku, który mówi to samo. To dziwne zachowanie. Musi mieć coś wspólnego z układem i sposobem obliczania wymiaru, ale obraz nie zależy tak naprawdę od niczego innego poza nim samym i css –

3

Myślę, że powinieneś spróbować tego ...

$("img").load(function(){ 
    // do some stuff 
    $(this).width(); 

}); 

zakładając używasz tylko znacznika img. w przypadku, gdy masz identyfikator tagu IMG, powinieneś użyć np. $ ("# Idimg) .load (zabawa ...... cd.)

+0

Tworzę tag –

Powiązane problemy