2017-11-05 9 views
0

遅延を使用すると、 "Uncaught ReferenceError:$が定義されていません"というエラーが発生しました。

Q.このスクリプトを正しく延期するにはどうすればよいですか?コードは、文書が解析された後まで実行されていない、そのスクリプトで

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script> 
<script> 
    $(document).ready(function() { 
     $(window).scroll(function() { 
      if ($(this).scrollTop() > 600) { 
       $('.scrollup').fadeIn(); 
      } else { 
       $('.scrollup').fadeOut(); 
      } 
     }); 
     $('.scrollup').click(function() { 
      $("html, body").animate({ 
       scrollTop: 0 
      }, 600); 
      return false; 
     }); 
    }); 
    </script> 
<!--end--> 
+0

CDNは問題ありません ..btw ..why defer ??? –

+1

jQueryライブラリに依存するすべてのスクリプトを実行したり、jQueryの後に読み込んだりする必要があります。かなり複雑です。 jQueryを(延期せずに)そのままにするのが最も簡単な方法です。 – instead

+0

一部のスクリプトを延期する場合は、他のスクリプトで実行します。しかし、遅延のために注文をロードするスクリプトは、他のエラーを引き起こす可能性があることに注意してください。 – instead

答えて

0

defer結果です。そのスクリプトに依存するスクリプト(この場合はjQueryに依存します)の場合は、deferを追加する必要があります(deferを使用する場合は読み込み順序が維持されます)。の前に edスクリプトを読み込みます。

あなたはdefer edスクリプトに依存インラインスクリプトを持っている場合は、外部ファイルにそれらを移動する必要があります(とsrc & defer追加)インラインスクリプトを延期することができないよう、。

+0

あなたはページを見てみることができますか?私はコーダーではありません。 https://www.thehangoutrestaurant.com/ –

+0

@CallMeNicholiこのページを見ると何も変わりません。説明したように、あなたはインラインの '

0

setInterval()関数を使用すると、jQueryの準備が整うまで待つことができます。

function start_scripts(){ 
    $(document).ready(function() { 
     $(window).scroll(function() { 
      if ($(this).scrollTop() > 600) { 
       $('.scrollup').fadeIn(); 
      } else { 
       $('.scrollup').fadeOut(); 
      } 
     }); 
     $('.scrollup').click(function() { 
      $("html, body").animate({ 
       scrollTop: 0 
      }, 600); 
      return false; 
     }); 
    }); 
} 

var jQ_interval = setInterval(function(){ 

    if(typeof jQuery == 'function'){ 
     clearInterval(jQ_interval); 
     start_scripts(); 
    } 

}, 300); // You can change 300 to other delay 

実行するコードがさらにある場合は、この方法をお勧めしません。より良い解決策は、jQueryを延期するのではなく、他のスクリプトです。

+1

これはかなり信頼できません。jQueryが一定の間隔以上にロードするとどうなりますか?それははるかに少ない場合はどうなりますか? –

+0

これはかなりわかりませんが、単純なif文を300 msごとに実行すると、ユーザCPUを傷つけることはありません。 jQueryのロードが300ミリ秒未満になると、これはまったく問題にはなりません。遅れは目立たない。 – instead

+0

それはかなりkludgyです。 'defer'を使って作業するつもりなら、実際にはインラインスクリプトはありません。また、jQueryが何らかの理由でロードされない場合、エラーを隠すことになります。なぜなら、それは決して失敗しないからです。 –

関連する問題