私はオブジェクトとイメージを挿入することができます。そして、そのオブジェクトの関数を呼び出します。私に無作為に見えるものは、時にはうまくいくこともありますが、DOMはまだ更新されていないと思いますか?オブジェクト(jquery)の遅延を挿入しますか?
//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);
}
1秒後にボタンを押してその最後の機能を手動で起動すると、常に機能するためです。
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')にループを置くことができますか?しかし、それはしばらくの間、無限のループ問題に悩まされるかもしれませんか?
あなたのコードのように要素を追加した直後に 'restoreSize'を呼び出していますか?それとも2つの別々の場所にあるのですか? – Ian
私は似たような経験をしました。あなたは古いブラウザに対してそれをテストしてヒットやミスをしていますか?クラスは予約語で、引用符で囲まなければなりませんが、ここではもっと大きな問題だと思います... – blackhawk
ブラウザがDOMTreeの要素を追加するまで待つ必要があると思います。 setTimeout(fx、0); – fernandosavio