Tôi cho phép người dùng chèn một đối tượng, một hình ảnh, và sau đó tôi gọi một hàm trên đối tượng đó. Những gì có vẻ ngẫu nhiên với tôi, đôi khi nó hoạt động và đôi khi không, tôi đoán nó đã làm với DOM không được cập nhật chưa?Chèn đối tượng (jquery) chậm trễ?
//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);
}
Vì nếu tôi tự kích hoạt chức năng cuối cùng bằng một nút sau một giây hoặc lâu hơn, nó luôn hoạt động.
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%');
}
Tôi cố gắng timeout zero với kết quả tương tự - đôi khi hình ảnh đã được nạp và đôi khi không phải như vậy nó hoạt động một cách ngẫu nhiên, với những hình ảnh lớn hơn (dành thời gian lâu hơn để tải trong trình duyệt) nó dĩ nhiên không thường xuyên hơn. Ngay bây giờ tôi đã bỏ qua nó với một thời gian chờ giây nhưng đó không phải là không có giải pháp khá: -/Có lẽ tôi có thể đặt một vòng trên tìm ('img') mà giữ kiểm tra cho hình ảnh và chỉ tiến hành một lần tìm thấy? Nhưng điều đó có thể dính vào tôi trong một vấn đề vòng lặp vô hạn tại một số lần?
Bạn có đang gọi 'restoreSize' ngay sau khi thêm phần tử (như trong mã của bạn) không? Hoặc là những người ở hai nơi riêng biệt? – Ian
Tôi đã có một trải nghiệm tương tự. Bạn có đang thử nghiệm chống lại các trình duyệt cũ và nhận được một cú đánh hay bỏ lỡ? lớp là một từ dành riêng và nên được trong dấu ngoặc kép, nhưng tôi nghĩ rằng họ là một vấn đề lớn hơn ở đây ... – blackhawk
Tôi nghĩ bạn cần đợi cho đến khi trình duyệt thêm phần tử trong DOMTree .. Bạn nên thử một setTimeout (fx, 0); – fernandosavio