0

Jquery でページのレンダリング中に要素のディメンションを取得しようとすると、次のようにタイムアウトを設定する必要があることがよくあります。

window.setTimeout(function(){
    console.log("calculate footer height");
    console.log( $('div:jqmData(role="footer")') )
    console.log(  wrap.find('.ui-footer').css("height") )
    },0);

46pxタイムアウトなしでこれを実行しながら、正しい値を返します(ケースでは)

    console.log("calculate footer height");
    console.log( $('div:jqmData(role="footer")') )
    console.log(  wrap.find('.ui-footer').css("height") )

要素を返しますが、その幅は0px

質問:
なぜこのようになるのか、さらに重要なことに、この例のように頼るよりも良い方法はありますsetTimeoutsか? 注意: 要素のレンダリングに影響を与えることはできません。これは Jquery Mobile によって行われるため、上記は別の「場所」から実行する必要があります。

ありがとう!

4

2 に答える 2

1

onload イベントに応答する必要があります

例えば:

$( function() {

    console.log("calculate footer height");
    console.log( $('div:jqmData(role="footer")') );
    console.log(  wrap.find('.ui-footer').css("height") );

} );

タイムアウトによりブラウザがレンダリングできるようになるため、正しい値を取得できます。onload バリアントを使用すると、ページがロードされてトリガーされるまで待機します。

多くの場合、次のような他の表記法があります

$( document ).ready( function() { .... });

$().ready( function() { .... });

私は好む

(function($) {
    $( function() { ... } );
} ( jQuery ) );

$ が jQuery を表すようにする

于 2012-10-27T11:58:57.100 に答える
0

Ok。解決策は見つかりませんでしたが、問題を次のように追跡しました。

  • プラグイン A がロードされ、初期化が妨げられるため、要素は寸法を取得しません。
  • プラグイン A を初期化する過程で、プラグイン B がロードされて初期化されます。
  • プラグイン B は要素の寸法を取得しようとしますが、A が完全に実行されていないため、要素は拡張されていません (= クラスなし、幅なし)。

これに対する修正は実際には見つかりませんでした。なぜなら
、a) プラグイン A (= ) を手動でトリガーする必要があるためJquery Mobileです。そうしないと、 ( vsでrequireJS初期化する) とうまく動作しません。また、 b) 自分のプラグインでは、Jquery の前にイベント バインディングを設定する必要があります。モバイルは初期化できるので、手動トリガーが必要です。mobileinitdocReady

誰かがこれに対する回避策を知っている場合は、回答として確認します。

投稿していただきありがとうございます。

于 2012-10-27T18:18:53.450 に答える