Проблема с шириной изображения в Google Chrome

Я пишу простой плагин jQuery, который отображает изображения с определенным классом в центре экрана (при нажатии в полный размер). Я использую этот html-код, где отображается мое изображение:

<div id="source">
   <img src="" alt="" />
</div>

В атрибуте «src» я помещаю путь к полноразмерному изображению, жду события загрузки, где я делаю анимацию с помощью jQuery:

$("#source img").load(function(){
var calcWidth = this.width + ...
}); 

Но в Google Chrome (и только в Google Chrome) при срабатывании события onload this.width равно ширине предыдущего изображения. Это означает, что когда я впервые устанавливаю «src» в «img/1.jpg» с шириной 800 пикселей, все в порядке, но когда я пытаюсь установить второе изображение «img/2.jpg» в «src» с шириной 600 пикселей, this.width по-прежнему возвращает 800 пикселей (в событии onload!).
как объяснить такое поведение?

UPD:
Я устанавливал src таким образом:

function NavClick(){
        $("#source img").attr({
            src: $(this).attr("src")
        });
        currentImage = this.indx;
    }

«это» относится к миниатюре изображения, я использую один и тот же src для миниатюры и полноразмерного изображения только для теста, позже я размещу их в разных каталогах.
Этот код решает мою проблему, но я не совсем понять почему:

function NavClick(){
        $("#source img").attr({
            src: "#"
        });
        $("#source img").attr({
            src: $(this).attr("src")
        });
        currentImage = this.indx;
    }

Перед установкой нового src я поставил "#", возможно это связано с кешированием изображений, но появляется только в google chrome.


person Kai    schedule 30.12.2010    source источник
comment
Используйте $(this).width() для чтения текущей ширины изображения внутри обработчика jQuery.   -  person Shadow Wizard Wearing Mask V2    schedule 30.12.2010
comment
$(this).width() возвращает значение, равное this.width   -  person Kai    schedule 30.12.2010
comment
Я надеюсь, что у вас нет img src= при загрузке страницы, пустой атрибут src для изображения означает, что источник является тем же URL-адресом, что и тот, который загружает текущую страницу (может быть POST или GET), установите как минимум # в атрибуте SRC вы сэкономите часы отладки.   -  person regilero    schedule 30.12.2010
comment
@regilero, спасибо, я исправил   -  person Kai    schedule 30.12.2010
comment
Что ж, из быстрого теста (jsfiddle.net/yahavbr/9xxUz) он отлично работает в Chrome - как вы устанавливаете источник изображения?   -  person Shadow Wizard Wearing Mask V2    schedule 30.12.2010
comment
Правильная ли ширина после небольшой задержки? Попробуйте var self = this; setTimeout(function(){ alert(self.width) }, 0);   -  person Brian Donovan    schedule 30.12.2010
comment
@ Брайан Донован не работает, как вы предлагаете   -  person Kai    schedule 03.01.2011


Ответы (1)


Используйте событие загрузки окна, изображение не полностью загружается в событие загрузки изображения (см. этот вопрос)

Я не проверял это, но это может помочь, дайте мне знать, если это не так (или если это так)

$(window).load(function(){    
    var calcWidth = $("#source img").width() + ...;
}); 
person Eran Medan    schedule 30.12.2010
comment
Это не сработает, так как он проверяет при изменении src, что означает, что событие window.onload давно сработало. - person Nick Craver; 30.12.2010