0

オペラで非常に奇妙なバグに遭遇しました。次のコードを確認してください。

$(document).ready(function(){
    var $imgHeight = $('.collection-item-image').width() / 3 * 4;
    $('.collection-item-holder').css('padding-top',$imgHeight + 'px');

    $(window).resize(function(){
        var $imgHeight = $('.collection-item-image').width() / 3 * 4;
        $('.collection-item-holder').css('padding-top',$imgHeight + 'px');
    });
});

ときどき Opera はコードを無視してドキュメントの準備ができたときに実行します。他のすべてのブラウザは、正常に動作します。ドキュメントの準備を完全に無視しているのではないかと思いましたが、アラート機能でテストしたところ、常に機能することがわかりました。通常のドキュメント準備状況では無視されることもありますが、関数が実行される前にアラートを追加すると、アラートボックスで「OK」を押すと、コードは毎回正常に実行されます。何らかの理由で、ユーザーがページを実行するためにページと対話する必要がある場合があります。

この問題を修正または回避する理由またはさらに良い方法を知っている人はいますか? これは、CSS をこのように設定した場合にのみ発生しているように思われ、ウィンドウのサイズ変更時にコードが完全に実行され、必要に応じて表示されることに注意してください。

4

2 に答える 2

0

ドキュメントによると、「.ready() に渡されたハンドラーは、DOM の準備が整った後に実行されることが保証されているため、通常、他のすべてのイベント ハンドラーをアタッチして他の jQuery コードを実行するのに最適な場所です。依存するスクリプトを使用する場合CSS スタイル プロパティの値を変更するには、スクリプトを参照する前に、外部のスタイルシートを参照するか、スタイル要素を埋め込むことが重要です。」

つまり、これはページ全体 (画像、外部リンク) がロードされたときではなく、ページの構造が準備できた直後に実行されます。時々うまくいくと言うので、これはおそらく競合状態です。画像が非常に高速に読み込まれるか、キャッシュから読み込まれると、DOM 対応イベントが発生したときに準備ができている可能性があります。あなたの場合、ページ上のすべてのメディアがロードされたときの onload が適切なイベントです。

于 2013-02-17T03:33:50.400 に答える
0

この問題の原因は不明ですが、関数を内部にラップすることでwindow.load()問題が解決されました。

于 2013-02-17T03:24:23.267 に答える