2016-08-02 4 views
0

これはおそらくダムの質問ですが、私は尋ねます。私はスクロール中にページ上のポイントを渡すときにdivスティックを作ろうとしています。私はこのスクリプトを持っています:スクリプトが機能しない(しかし、他のサイトで正常に動作します)

<script type="text/javascript"> 
$(document).ready(function() { 
     var s = $("#sticker"); 
     var pos = s.position();      
     $(window).scroll(function() { 
     var windowpos = $(window).scrollTop(); 
     if (windowpos >= pos.top + 335) { 
      s.addClass("stick"); 
     } else { 
      s.removeClass("stick"); 
     } 
    }); 
}); 
</script> 

私のサイトではうまくいきます。しかし今、私は新しいサイトでそれを試しています。そして、私のコンソールログにエラーが表示されるたびに:TypeError: $ is not a functionそして、私のコードでエラーを見ると、$(document).ready(function() {の部分が強調表示されます。

$(document).ready部分と});部分を削除すると、var s = $("#sticker");部分が$ is not a functionと表示されます。

私は

<script type="text/javascript"> 
jQuery(document).ready(function() { 
     var s = $("#sticker"); 
     var pos = s.position();      
     $(window).scroll(function() { 
     var windowpos = $(window).scrollTop(); 
     if (windowpos >= pos.top + 335) { 
      s.addClass("stick"); 
     } else { 
      s.removeClass("stick"); 
     } 
    }); 
}); 
</script> 

を試してみましたが、その後、それは(document).ready部分をスキップし、それが再び私var部分は関数ではありませんと言われます。

私はスクリプトを削除してもコンソールログメッセージはありません。何が問題なの? headerfooterにコードを入れようとしましたが、<div id="sticker">...</div>の直前でもコードを入れてみました。何も動作していないようです。スクリプトは他のサイトでも完璧に動作します...

+1

すると、この方法をお試しください$ '*))' noConflict'モードのように聞こえます – eisbehr

+1

JQueryがあなたのページに含まれていて、利用可能ですか? – ste2425

+0

@ ste2425、他のすべてのjQueryコードは正常に動作します。 ... – Steggie

答えて

3

noConfilctモードではjQueryを実行しています。つまり、jQueryはjQueryでのみ利用可能であり、$では使用できません。コードready stateまたはIIFEを使用してjQueryにアクセスするには$でコードをラップすることができます。

準備完了状態:

jQuery(document).ready(function($) { 
    // access jQuery by '$' inside 
}); 

// this is a shorthand for the above '.ready' creation 
jQuery(function($) { 
    // access jQuery by '$' inside 
}); 

生命維持: `jQueryの(ドキュメント).ready(関数($){`(* `注意:

(function($) { 
    // access jQuery by '$' inside 
})(jQuery); 
+0

答えをくれてありがとう。なぜ私は他のサイトでも同じ問題を抱えていませんでしたか?これはコードのこの部分でしょうか? '// jQueryのGoogleのAPIを作る 関数modify_jquery(){ 場合(!is_admin()){ //はjQueryの wp_deregister_script( 'jqueryの')のローカルコピーをロードするために次の2行をコメントアウト。 wp_register_script( 'jquery'、 'http://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js'、false、 '2.2.4'); wp_enqueue_script( 'jquery'); } } add_action( 'init'、 'modify_jquery'); ' – Steggie

+0

一般に、' noConflict'モードは単に 'jQuery.noConflict();'で始まります。私は 'wp_register_script'関数がどのように働いているのか分かりませんが、それは可能です。 '$'にもう一度jQueryを登録したいのであれば、 'window $ = jQuery;'のようなことをすることができますが、 '$'を使った他のスクリプトがあることを覚えておいてください。 。もし何かが 'noConflict'モードでjQueryを置いたり、' $ 'を再割り当てすると、その理由があるでしょう... – eisbehr

+0

さて、私はそれを今のままにします。私は他のスクリプトを台無しにしたくありません。再度、感謝します。 – Steggie

関連する問題