1

私はこのコードを実装しました:

<script>
       var mod_PPfix = false;

        Modernizr.load({
            test: Modernizr.csstransitions && Modernizr.input.required,
            nope: ['script1.js', 'script2.js'],
            complete: function () {

                mod_PPfix = true;
                console.log('ppfix');
            }
        });
</script>

数行後に、この別のスクリプトを配置しました

<script>               
   if (!mod_PPfix) {
       $(document).ready(function() { 

           console.log('this should be seen only if modernizr's tests are true');
       });
   }
</script>

今、私は本当にJavaScriptの新人ですが、上記のコードからconsole.log()、modernizrテストの結果がtrueの場合にのみ2番目を表示することを期待していました. テスト結果が陰性であっても、2 番目のログは記録されます。

私が知る限り、コンソールではconsole.log()「ppfix」という最初のメッセージの前に 2 番目のメッセージが表示されるので、ロード タイミングの問題のようなものだと思いますが、その理由はわかりません。私は何を間違っていますか?

それが役立つ場合は、Jquery をライブラリとして使用しています。

ありがとうございました!

4

1 に答える 1

0

テストが true の場合に 2 番目のログ メッセージを表示したい場合は、そうではありませんif (mod_PPfix)か? テストが失敗した場合、バージョンは2番目のメッセージを出力します(このフィドルを参照してください)

Modernizr.load を使用すると非同期で処理が行われるため、2 番目<script>は script1.js と script2.js の読み込みが完了する前に実行されるため、completeコールバックが発生する前に実行される可能性があります。2 番目にやりたいことは何でも<script>、コールバックで呼び出す必要がありcompleteます。例えば

    Modernizr.load({
        test: Modernizr.csstransitions && Modernizr.input.required,
        nope: ['script1.js', 'script2.js'],
        complete: function () {
            initialize_me();
        }
    });

関数が別の場所initialize_me()で定義され、次のようなコードが含まれている可能性がある場所

if (Modernizr.csstransitions && Modernizr.input.required) {
    // Use CSS3
} else {
    // Do things that depended on script1.js and script2.js being loaded
}
于 2012-11-19T03:07:21.173 に答える