私はこのようなjQueryラッパーを使用しているWordPressプラグインの中に簡単なjQueryスクリプトを持っています:
$(document).ready(function(){
// jQuery code is in here
});
私はWordPressダッシュボード内からこのスクリプトを呼び出していて、jQueryフレームワークがロードされた後にそれをロードしています。
Firebugでページをチェックすると、常にエラーメッセージが表示され続けます。
TypeError:$は関数ではありません
$(document).ready(function(){
この関数でスクリプトをラップする必要があります。
(function($){
// jQuery code is in here
})(jQuery);
私はこのエラーを何度か経験してきましたが、それをどう処理するかはわかりません。
任意の助けは大歓迎です。
デフォルトでは、WordpressでjQueryをエンキューするときはjQuery
を使用する必要があり、$
は使用されません(これは他のライブラリとの互換性のためです)。
それをfunction
にラップするという解決策はうまくいくでしょう。あるいはjQueryを他の方法でロードすることもできます(しかしそれはおそらくWordpressではお勧めできません)。
document.ready
を使用しなければならない場合は、実際には$
を関数呼び出しに渡すことができます。
jQuery(function ($) { ...
これで解決するはずです。
jQuery(document).ready(function($){
//you can now use $ as your jQuery object.
var body = $( 'body' );
});
簡単に言うと、WordPressは可能な限り独自のスクリプトを実行し、$
変数をリリースして他のライブラリと衝突しないようにします。 WordPressはあらゆる種類のWebサイト、アプリ、そしてもちろんブログに使用されているので、これは完全に理にかなっています。
彼らのドキュメンテーションから:
WordPressに含まれるjQueryライブラリは、noConflict()モードに設定されています(wp-includes/js/jquery/jquery.jsを参照)。これはWordPressがリンクできる他のJavaScriptライブラリとの互換性の問題を防ぐためです。
NoConflict()モードでは、jQueryのグローバル$ショートカットは利用できません...
この解決策は私のために働いた
;(function($){
// your code
})(jQuery);
コードをクロージャの内側に移動し、jQuery
の代わりに$
を使用してください。
...探しすぎた後
このような衝突を避けることができます
var jq=jQuery.noConflict();
jq(document).ready(function(){
alert("Hi this will not conflict now");
jq('selector').show();
});
var $=jQuery.noConflict();
$(document).ready(function(){
// jQuery code is in here
});
Ashwani PanwarとCyssooの回答: https://stackoverflow.com/a/29341144/3010027
これを試して:
<script language="JavaScript" type="text/javascript" src="jquery/jquery.js"></script>
<script>
jQuery.noConflict();
(function ($) {
function readyFn() {
// Set your code here!!
}
$(document).ready(readyFn);
})(jQuery);
</script>
あなたはfunction()に$を渡さなければなりません
<script>
jQuery(document).ready(function($){
// jQuery code is in here
});
</script>
JQueryの参照を再確認してください。複数回参照しているか、関数の呼び出しが早すぎる(jQueryが定義される前に)可能性があります。あなたは私のコメントで述べたように試すことができ、あなたのファイルの先頭(頭の中)に任意のjQueryリファレンスを置き、それが助けになるかどうかを確かめることができます。
あなたがjQueryのカプセル化を使用するならば、それはこの場合助けになるべきではありません。私はそれがよりきれいでそしてより明白であると思うのでそれを試してください、しかしjQueryが定義されないならばあなたは同じエラーを受けるでしょう。
結局... jQueryは現在定義されていません。
このように$
signをjQuery
に置き換えます。
jQuery(function(){
//your code here
});
また、私はjQueryのnoConflictモードを使用するための良い解決策を見つけました。
(function($){
$(document).ready(function(){
// write code here
});
// or also you can write jquery code like this
jQuery(document).ready(function(){
// write code here
});
})(jQuery);
私はここからこの解決策を見つけました。 https://thecodingstuff.com/how-to-properly-use-jquery-noconflict-mode-in-wordpress/
(function($){ "use strict"; $(function(){ //ここにあなたのコード[.____ [] ]}); ](jQuery));
私にとってうまくいったことインポートする最初のライブラリはクエリライブラリで、 その直後 はjQuery.noConflict()メソッドを呼び出します。
<head>
<script type="text/javascript" src="jquery.min.js"/>
<script>
var jq = jQuery.noConflict();
jq(document).ready(function(){
//.... your code here
});
</script>
<script>
var jq=jQuery.noConflict();
(function ($)
{
function nameoffunction()
{
// Set your code here!!
}
$(document).ready(readyFn);
})(jQuery);
今jQueryの代わりにjqを使う
関数名とファイル内のID名の1つが同じ場合に、この問題に遭遇します。ファイル内のすべてのID名が一意であることを確認してください。
つかいます
jQuery(document).
の代わりに
$(document).
または
関数内では、$は予想通りjQueryを指しています。
(function ($) {
$(document).
}(jQuery));
あなたが使用することができます
jQuery(document).read(function(){ ... });
または
(function ($) { ... }(jQuery));