2012-03-04 3 views
0

複雑なAJAXサイトでは、新しく挿入されたDOMオブジェクトのCSS次元、つまり特定のDIVs innerWidthの値を取得する必要がありますロードした画像を親の大きさにリサイズすることができます。jQuery.load()を介してDOMに挿入されたオブジェクトの寸法(innerWidth)を取得する方法

私はjQuery.load() -POSTを経由してDOMに新しいものをロードしています:

$('DIV#newStuff').load('insertthis.ajax', {id:1}, function() { 
    var iMaxWidth = $('DIV#widthNeeded').innerWidth(); 
    console.log(iMaxWidth); 
}); 

問題:予想通りは、Firefox(PaleMoon)9.2 => "442" を返します。 Maxthon 3とChrome 17 => "0"またはもっと高い値 "736"を返します。 両方ともWin7。 jQuery 1.7.1

同じ結果を持つjQuery.actual() - プラグインも試しました。

クリアするには:これは、実際の機能の非常に簡単な抽出です。私は中心的な問題を示してみようとしています。読み込まれたスクリプトはプレーンなPHPです(拡張子を.ajaxに変更しました)。

溶液(回避策): は、追加のsetTimeout(と成功のコールバックのコードをラッピング) - 関数は、一部のブラウザにproberly新しくレンダリングされたDOM-ものの大きさを計算するために悲惨な必要な時間を与えます。あなたが不一致のこれらの種類を取得することだろう、なぜ私はすぐに見ることができない

$('DIV#newStuff').load('insertthis.ajax', {id:1}, function() { 
    setTimeout(function() { 
     var iMaxWidth = $('DIV#widthNeeded').innerWidth(); 
     console.log(iMaxWidth); 
    }, 500); 
}); 
+1

PHPとは何が関係していますか? – Gerep

+0

load関数の後にinnerWidthコールを置いている場合(コールバックの直前、アラートを呼び出す直前)には '0'の結果が得られますか? –

+0

@AshleyDaviesいいえ!悪い:私は "null"を取得します。 – maxpower9000

答えて

1

あなた改訂質問に答えます。

$('DIV#newStuff').load('insertthis.ajax', {id:1}, function() { 
    setTimeout(function() { 
     var iWidth = $('DIV#widthNeeded').innerWidth(); 
     var jqWidthKeeper = $('DIV#widthKeeper'); 
     var iMaxWidth = jqWidthKeeper.actual('innerWidth'); 
     console.log(iMaxWidth); 
    }, 0); 
}); 

jQueryのすぐ要素を更新した後loadコールバックを呼び出します。それはあなたが効果的にこのような収量を、実行して、ブラウザにリフローする瞬間や何かを与える必要があるということかもしれません。私はときどきブラウザが、あなたのレンダリングスレッドにリフローする瞬間を与える必要があると見てきました。

+0

**はい!良い解決策!**この回避策を使用すると、すべてのブラウザから返される値が同じになります。私は実際には安全な側にいるためにタイムアウトを500ミリ秒に設定しなければなりませんでした。少年は、私はハッキングが嫌い! – maxpower9000

+0

@ maxpower9000:うれしそう!うわー、500ms。 –

関連する問題