0
jQuery.noConflict(); or $.noConflict();    
(function($) { 
    $(document).ready( function() {
     // Show menu when #input1 is clicked
        $("#input1").contextMenu({
        menu: 'myMenu'
        },
         function(action, el, pos) {
        alert("clicked");
        });
    })(jQuery); 

上記のコードでは、function($){}(jQuery);を使用して、プロトタイプとの競合を回避しています。しかし、コールバック関数(action、e1、pos)では、プロトタイプから関数を呼び出しています。

両方$.noConflict(); &jquery.noConflict(); 私は試しましたが、役に立ちません。この競合を回避できる提案ショーを提供してください。

競合はこれで解決されました。専門家のアドバイスをありがとうございました。しかし、もう1つの問題は、input1を右クリックしてもコンテキストメニューが開かないことです。貴重な提案をお願いします。

ありがとうございます。

4

3 に答える 3

0

コードにエラーがあります:});(jQuery);

匿名関数を定義するだけでなく、呼び出す必要があります。jQueryを呼び出すための引数として使用する必要があります。したがって、匿名関数の内部$jQuery、スコープが異なるためです。

匿名関数を定義する場合は(function($){/*your stuff*/});(jquery)、実行しないでください。関数内のすべては実行されません。また、無名関数には名前がないため、実行する方法がありません。

行の最初のセミコロンを削除します。

(function($) { 
    // do your stuff
})(jQuery);

編集:

これが機能することについての簡単な説明:

これは無名関数であり(Javascriptの無名関数がどのように機能するかわからない場合は、この質問を参照してください)、を使用して関数を呼び出しますjQueryjQuery.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関数の実装を教えてください。

于 2012-04-17T13:24:44.937 に答える
0

jQuery.noConflict()シンボルを使用するライブラリ間の干渉を回避するために使用する必要があることを前提として、最後に$余分なものもあります;

(function($) { 
    ...
}(jQuery)); 
于 2012-04-17T13:21:44.517 に答える
0

問題はjquery.contextMenu.jsにあります。私はこれらの行に言及しました:

// This plugin is dual-licensed under the GNU General Public License
//   and the MIT License and is copyright A Beautiful Site, LLC.
//
if(jQuery)( function() {
    $.extend($.fn, 
...
})(jQuery);

'$'したがって、 jQueryやその他のlibとは言えません。プラグインのバグです。

に変更function()function($)、競合を解決する必要があります。

于 2012-04-17T13:47:35.400 に答える