Итак, у меня есть две функции. Один для загрузки изображения, а другой - для изменения его элемента контейнера. Естественно, элемент изображения нужно загружать, прежде чем можно будет произвести какие-либо измерения. Это выглядит примерно так:JQuery - функция вызова после загрузки изображения
var imgEl;
loadImage(imgSrc);
// only call the below, once the above has finished loading and appending the image.
resizeModal();
function loadImage(imgSrc) {
var image = new Image();
image.src = imgSrc;
image.onload = function() {
imgEl = $('<img src='+image.src+'/>');
imgEl.prependTo(modal);
}
}
function resizeModal() {
// Do stuff based off the imgEl once it's been loaded and appended
var width = imgEl.width();
modal.width(width)
}
Я попытался с помощью $ .Deferred, но я, видимо, что-то отсутствует, как «B» всегда получает вошедшего прежде, чем «А»:
var imgEl;
loadImage(imgSrc).done(resizeModal())
function loadImage(imgSrc) {
var def = $.Deferred();
var image = new Image();
image.src = imgSrc;
image.onload = function() {
imgEl = $('<img src='+image.src+'/>');
imgEl.prependTo(modal);
console.log("A");
def.resolve();
}
return def;
}
function resizeModal() {
console.log("B");
// Do stuff based off the imgEl once it's been loaded and appended
var width = imgEl.width();
modal.width(width)
}
Поскольку изображение требует времени для загрузки, поэтому при выполнении 'resizeModal' изображение, возможно, еще не загружено. Поэтому поместите 'resizeModal()' в 'image.onload'. – fuyushimoya
@fuyushimoya: В этом весь смысл, почему OP использует обещания. –
@FelixKling Он сначала пробовал путь не о обещаниях, и мой комментарий о том, что его первая часть кода, есть ли проблемы? – fuyushimoya