2012-01-31 11 views
3

に定義されていない、私はちょうど</body>要素の幅は文書準備

<script type="text/javascript" charset="utf-8"> 
    $(document).ready(function(){ 
     var diff = $('div.canvas img.photo').get(1).width; 
     console.log(diff); 
    }); 
</script> 

前に、次のコードを使用して、要素の幅を取得しようとしていますが、それは未定義ログに記録します。ただし、$('div.canvas img.photo').get(1).widthをChrome/Firebugコンソールで直接実行すると、正しい幅が返されます。イメージにJavascriptがロードされていないため、ドキュメントの準備ができたら起動する必要があります。私は間違って何をしていますか?

+0

は 'はconsole.log(差分)を追加します;' 2つのラインの間とyou'llはwhat's間違っを参照してください。 – Stefan

+0

@Mild Fuzz: 'console.log(diff.width);' // typobのように見える – Dev

+0

今すぐ編集。 –

答えて

6

いいえ、そうではありません。 document.readyは、すべてのHTMLがロードされたときに起動しますが、イメージはロードされません。すべての画像が読み込まれるまで待つ場合は、window.loadを使います。

例:一部の人が指摘しているよう

また
$(window).load(function(){ 
    var diff = $('div.canvas img.photo').get(1).width; 
    console.log(diff); 
}); 

、あなたが二回「.width」プロパティを取得しようとしていました。

可能であれば、CSSのimagetagsの幅を設定します。そうすれば、コードに対してdocument.readyを安全に使用できます。 window.loadを使用すると、スクリプトの実行が自然に遅れることがあります。クライアント接続の速度やページ上のコンテンツの量に応じて、10秒になる可能性があります。あなたがスタイリングをしているなら、これは望ましくないジャンプやジッタを引き起こす可能性があります。

1

imgはDOM準備ができていません。 docs:画像など、すべての資産が完全に受信されるまで

JavaScriptは、ページがレンダリングされるときにコードを実行するためのloadイベントを提供していますが、このイベントがトリガされません。ほとんどの場合、DOM階層が完全に構築されるとすぐにスクリプトを実行できます。 .ready()に渡されたハンドラは、DOMの準備が整った後に実行されることが保証されているので、他のすべてのイベントハンドラをアタッチして他のjQueryコードを実行するのに最適です。 CSSスタイルプロパティの値に依存するスクリプトを使用する場合は、スクリプトを参照する前に外部スタイルシートまたはスタイル要素を埋め込むことが重要です。これに

変更:

$(window).load(function(){ 
      var diff = $('div.canvas img.photo').get(1).width; 
      console.log(diff.width); 
     }); 
0

問題は、あなたがそのdimentionsを取得しようとすると、あなたのイメージがまだロードされていないということです。コードを$(window).loadにラップさせるにはまたは別のオプション。イメージのサイズを知っていれば、widthheightの属性を与えることができます。それはDOMContentLoadedの内部でさえも機能します。場合によっては、onloadイベントが 'DOMContentLoaded'を起動するのに時間がかかるため、これが望ましい場合もあります。 それ以外の場合は、$(window).loadを使用する必要があります。@Andreas Carlbomの回答を参照してください。

1

イメージの幅は、完全にロードされたときにのみ利用可能です。 jQueryはすべてのイメージでもonloadイベントをサポートしています。

を使用でき

$('div.canvas img.photo').load(function(){ 
    // here the image (or all images which match selector) has been loaded. 
} 
+0

イメージに負荷を付けるときには "警告"があります。 [docs](http://api.jquery。com/load-event /) – gdoron

+0

@gdoron情報とリンクをありがとう。それは本当に助けになりました。私は過去にimgタグで常にloadを使用していました。もう一度やりません。 – Jashwant

+0

さて、私の答えのように文書に添付してください。 – gdoron