Ваш цитируемый код, делающий это в строке, получает разумный результат, так как изображение может не загружаться до того, как ваш код выполнится. Вы сказали, что поместили его в обработчик onload
, и это также дает тот же результат. Вы действительно имели в виду обработчик onload
? Потому что я не могу воспроизвести этот результат. Обратите внимание, что функция jQuery ready
является , а не и обработчиком onload
, это происходит намного раньше. Чтобы убедиться, что изображения загружены, используйте событие load
или событие window
load
. jQuery ready
происходит намного раньше этого.
Так что это должно работать:
$(window).bind('load', function() {
var img = $("#theimage");
log("Width: " + img.width());
log("Height: " + img.height());
});
... (где log
- это то, что выводит на страницу), и это должно работать:
$(document).ready(function() {
$("#theimage").bind('load', function() { // BUT SEE NOTE BELOW
var img = $(this);
log("Width: " + img.width());
log("Height: " + img.height());
});
});
... но это не будет:
$(document).ready(function() {
var img = $("#theimage");
log("Width: " + img.width());
log("Height: " + img.height());
});
... потому что это происходит слишком рано.
Редактировать : Я действительно, действительно должен был сказать выше: если вы смотрите событие изображения load
(а не событие загрузки window
), вам нужно проверить, чтобы убедиться, что изображение еще не было загружено, потому что его событие load
, возможно, уже сработало. Это будет выглядеть примерно так:
$(document).ready(function() {
var img, imgElement;
// Find the image
img = $("#theimage");
imgElement = img[0];
if (imgElement && imgElement.complete) {
// Already loaded, call the handler directly
loadHandler.call(imgElement);
}
else {
// Not loaded yet, hook the event
img.bind('load', loadHandler);
}
function loadHandler() {
var img = $(this);
log("Width: " + img.width());
log("Height: " + img.height());
img.unbind('load', loadHandler);
}
});
Это вызовет loadHandler
при первой возможности, выиграла ли загрузка изображения гонка или код ready
выиграл гонку.