2011-03-24 9 views
3

要素が作成されたときに、画像要素である​​関数のコールバックを実行したいと考えています。コードは、次のコードで新しい画像要素を読み込むことで動作します。ロード関数jQueryのコールバック

$('<img />').load(function() 
{ 
    var img = this; 
    $('.block-wrap img').fadeOut('slow', function() 
    { 
     $(this).replaceWith(img); 
    }); 
}).attr('src', loadurl); 

しかし、画像が読み込まれて置き換えられたときに続行したいと考えています。これは、私はそれを動作させる必要がある方法です:

$('<img />').load(function() 
{ 
    var img = this; 
    $('.block-wrap img').fadeOut('slow', function() 
    { 
     $(this).replaceWith(img); 
    }); 
}).attr('src', loadurl); 

$('.block-wrap input.imageheight').val($('.block-wrap img').height()); 
$('.block-wrap input.imagewidth').val($('.block-wrap img').width()); 

それは最初の画像の高さ(負荷スピナー画像で置き換えられていない画像)を返しますので、私は画像の高さを取得できるようにする必要がありますDOMに完全にロードされたときの幅を示します。あまりにも悪い.replaceWith()コールバックメソッドがありませんが、私は​​関数を渡された関数のために動作しないので、​​でコールバック関数を使用することはできません。

答えて

0

これは100%ではありませんが、replaceWithの最後にロードイベントを追加できませんか?すなわち:

 
$(this).replaceWith(img).load(function(){ 

    $('.block-wrap input.imageheight').val($('.block-wrap img').height()); 
    $('.block-wrap input.imagewidth').val($('.block-wrap img').width()); 

}); 
+0

Hmmm。それはもっともらしく、各値に対して常に '0'を返したので、私はそれらを100msの' setTimeout() 'でラップして、イメージの次元を返しました。それよりもはるかに良い解決策があるかどうかまだ分かりません。 – MacMac

0

$('.block-wrap img').height()$('.block-wrap img').width()​​前仕上げと呼ばれているので、間違ったイメージのサイズを返します。

loadコールバック(.replaceWithの後)に2つの行を挿入して、正しいイメージを参照できるようにします。

$('<img />').load(function() 
{ 
    var img = this; 
    $('.block-wrap img').fadeOut('slow', function() 
    { 
     $(this).replaceWith(img); 
     $('.block-wrap input.imageheight').val($('.block-wrap img').height()); 
     $('.block-wrap input.imagewidth').val($('.block-wrap img').width()); 
    }); 
}).attr('src', loadurl); 
関連する問題