2009-05-20 25 views
6

この問題をデバッグするためのプラグインの裸の骨(つまり、機能はなく、構造のみ)に縮小したプラグインを作成しましたが、まだ存在しています。 divのサイズ変更を扱い、ドキュメントの幅に基づいています。ChromeでJQueryウィンドウの幅が正しくありません

問題は、レポートされたドキュメントの幅が実際の幅から17ピクセル小さくなっているため、divのサイズが正しくないことです。

私は、問題が発生した場所を見つけるために、アラートに入れている:「準備完了」機能の前に :「準備」機能インサイド1780px(正しい幅) :1763pxプラグイン内部 :1763px (全ての値から返さ

これはChrome内でのみ発生し、プラグインが効果的に何も効果がなくなっても依然として残っています。

これはなぜ起こっているのですか?

+0

として

$(window).load(function() {}); 

を使用する必要があります。一部のコードは、問題のローカライズに役立ちます。 – Magnar

+0

私はより具体的な場所に絞っています。 レディ機能の前にアラートが表示されている場合、[OK]をクリックするとDivが正しくレンダリングされます。このアラートが削除されると、実際の幅の17pxに達しません。アラートが表示されたときに他のイベントや何か他のことが起こっていますか? – Stuart

+1

私は、スクロールバーを強制していたプレースホルダテキストをすべて削除しました。そして、ギャップはスクロールバーサイズのスペースに縮小されました。スクロールバーの幅が減算されていると思います。回避策のアイデアはありますか? – Stuart

答えて

2

jQuery(window).width()がSafariとChromeで間違った値を返すことが判明しました。 jQuery documentationから取ら

+1

Webkitは実際に幅を定義する上でW3C標準に従いません。スクロールバーにはウィンドウの幅が含まれていますが、スクロールバーはウィンドウの幅に含まれてはいけないというスペックがありますBoooo! – dudewad

3

:など 画像などすべての資産が完全に受信されるまで、JavaScriptがページ がレンダリングされたときにコードを実行するための負荷 イベントを提供していますが、このイベントは を得ることはありません

がトリガ。 ほとんどの場合、DOM階層が完全に構築されたらすぐに スクリプトを実行できます。 を.ready()に渡したハンドラは、DOMの準備ができてから が実行されることが保証されているので、 は他のjQueryコードを で実行するのが最も良い場所です。 CSS スタイルプロパティの値に依存する スクリプトを使用する場合は、 外部スタイルシートを参照するか、 埋め込みスタイル要素を使用して、 スクリプトを参照することが重要です。

コードがロード 資産を依存している場合(例えば、画像の寸法 が必要とされる場合)で、コード 代わりに負荷イベントのハンドラ内に配置されるべきです。

あなたはおそらく、スクロールバーのサイズが差し引かれることかもしれませんトリガイベント

+0

$(window).width()をコンソールに置くと間違っています。それは呼び出されるタイミングではなく、CSSを介して幅の一部としてスクロールバーを含むChromeの問題ですが、JSではスクロールバーを減算したウィンドウ幅が使用されます。 – Sawtaytoes

関連する問題