コードにエラーがあります:});(jQuery);
匿名関数を定義するだけでなく、呼び出す必要があります。jQueryを呼び出すための引数として使用する必要があります。したがって、匿名関数の内部$
はjQuery
、スコープが異なるためです。
匿名関数を定義する場合は(function($){/*your stuff*/});(jquery)
、実行しないでください。関数内のすべては実行されません。また、無名関数には名前がないため、実行する方法がありません。
行の最初のセミコロンを削除します。
(function($) {
// do your stuff
})(jQuery);
編集:
これが機能することについての簡単な説明:
これは無名関数であり(Javascriptの無名関数がどのように機能するかわからない場合は、この質問を参照してください)、を使用して関数を呼び出しますjQuery
。jQuery.noConflict()
コードで使用する場合、jqueryへのバインドを回避するために行う必要があるように、プロトタイプライブラリにバインドされているのではなく、jquery関数の$
ような呼び出しのみを使用できます(明示的にそのように呼び出して区別します)オブジェクトのチェーンから)。jQuery('#myId')
$('#myId')
$
prototype
ここで、無名関数について考えてみましょう。
あなたが持ってい(function($){ /* Some stuff with $ as a variable */ })
ます。関数の内部には新しいスコープがあるため$
、関数に渡す変数のみであり、関数の$
外部ではありません(プロトタイプライブラリにバインドされたままです)。
ここで、無名関数に何かを渡して実行します(function($){ /* Some stuff with $ as a variable */ })(jQuery)
。これ$
で、関数の内部は.....であり、外部とjQuery
同じではありません。$
編集2:
質問を更新したので、両方のライブラリを機能させるための手順を説明します。jQueryの前にPrototypeの参照を含めてから、を呼び出す必要がありますjQuery.noConflict()
。その呼び出しの後、$()
デフォルトでプロトタイプライブラリの関数になります。jQueryライブラリの関数を呼び出すには、を使用する必要がありますjQuery()
(jQuery APIリファレンスを参照)。オブジェクトへの参照を無名関数に渡すjQuery
ため、無名関数内で$
jQueryオブジェクトを参照している場合、プロトタイプライブラリの機能を使用することはできません。
コールバック関数の問題について:contextMenu
この関数は競合のない初期化を正しく使用していない可能性があるため、問題は関数の内部にある可能性がありますが、これは単なる推測です。contextMenu
関数の実装を教えてください。