ширина и высота изображения равны нулю из-за асинхронной загрузки изображения

Я долгоbase64 введите строку, которую я получаю, и я хотел бы установить в качествеsrc изображения

 $('#img').attr('src',base64data)
 console.log('height - ' $('#img').height());
 console.log('width - ' $('#img').height());

Похоже, я возвращаюсь0 для обоихheight а такжеwidth, Конечно, если я подожду некоторое время тогда я получу правильную высоту.

Дело в том.attr() не имеет обратного вызова, как я могу получить высоту и ширину послеsrc атрибут устанавливается без получения0 назад. (Я думаю, что я получаю 0, потому что изменение в Jquery происходит асинхронно, но я не могу быть слишком уверен)

 Akshat22 мая 2012 г., 09:38
Нет, но я делаю это, это определенно лучше, чем обработчик событий изменения размера, который я имел в виду
 Andreas Niedermair22 мая 2012 г., 09:36
ты когда нибудь пробовал.load()-Перезвоните?

Ответы на вопрос(1)

Решение Вопроса
$('#img').one('load', function() {
   console.log('height - ' $(this).height());
   console.log('width - ' $(this).width());
})
.attr('src',base64data);

/* if this image is already cached load event couldn't be fired:
 * then look for "complete" status and trigger load event 
 */
if ($('#img').get(0).complete) {
   $('#img').trigger('load');
}

Прежде чем получитьwidth а такжеheight вам нужно подождатьload событие. Обратите внимание, что я использовалone() метод, потому что если изображение уже кэшировано, оно не должно запускатьload событие дважды

 Akshat22 мая 2012 г., 09:42
Я даже не знал, что спасибо!
 Akshat22 мая 2012 г., 09:41
Это .one или .on? Это определенно работает, хотя
 22 мая 2012 г., 09:42
в моем конкретном примереone()иначе вы можете выполнить обработчик события дважды
 22 мая 2012 г., 09:37
Просто убедитесь, что вы в курсе "предостережений от использованияload событие с изображениями & quot; (подробно вload API)
 22 мая 2012 г., 09:39
Сообщение обновлено для управления уже кэшированным изображением

Ваш ответ на вопрос