我允许用户插入一个对象、一个图像,然后我在该对象上调用一个函数。什么在我看来是随机的,有时有效,有时无效,我想这与 DOM 尚未更新有关?
//add a new image
function add_image(img) {
var objCount = count_objects() + 1;
var objId = 'object_'+objCount;
var myNewImg = jQuery('<div/>', {
id: objId,
class: 'object_image invisible',
}).appendTo('#objectbox');
//sätt objektnamnet (användaren kan ändra senare)
$('#'+objId).attr('namn', objId)
//sätt låsta proportioner som standard
$('#'+objId).addClass('lockedAspectRatio')
//lägg till bilden i detta element
var imgInner = jQuery('<img/>', {
id: objId,
class: 'object_image_inner',
src: img,
}).appendTo( '#'+objId );
window.objectCounter++;
prepare_editmode();
//reset the flag and the temporary image field now that image adding is complete
$('#imageGhost').val(null);
//fixa rätt storlek på bilden
setTimeout(function(){
restoreSize(myNewImg,imgInner);
$(myNewImg).removeClass('invisible');
}, 1500);
}
因为如果我在一秒钟左右后用按钮手动触发最后一个功能,它总是可以工作的。
function restoreSize(myImg,imgInside) {
if (imgInside == null) {
console.log("nothing passed");
var imgInside = $(myImg).find('img');
}
else {
console.log("passed alright");
}
//remove fixed dimensions on containing div
$(myImg).css("height", 'auto' );
$(myImg).css("width", 'auto' );
//remove the 100% attribute on the image
$(imgInside).css("width", 'auto' );
$(imgInside).css("height", 'auto' );
//get calculated dimensions of div once img original size determines it
var newWidth = $(myImg).css("width");
var newHeight = $(myImg).css("height");
//...and set them firmly.
$(myImg).css("width", newWidth );
$(myImg).css("height", newHeight );
//restore the height/width 100% property to image in case of new resize
$(imgInside).css("width", '100%' );
$(imgInside).css("height", '100%' );
}
我尝试使用相同的结果超时零 - 有时图像已经加载,有时不是这样它随机工作,更大的图像(在浏览器中加载需要更长的时间)它当然更频繁地失败。现在我已经用几秒钟的超时绕过了它,但这不是一个很好的解决方案:-/也许我可以在 find('img') 上放置一个循环,不断检查图像并且只在找到后继续?但这有时可能会让我陷入无限循环问题?