2012-04-17 18 views
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)では、再びprototypeから関数を呼び出しています。

両方とも$ .noConflict(); & jquery.noConflict();私は試したが、使用していない。 この競合を避けることができますか?

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

ありがとうございます。 });(jQuery);

あなたがすべき:あなたが$記号を使用するライブラリ間の干渉を避けるためにjQuery.noConflict()を使用する必要がある前提

+0

['$ .noConflict()'](http://api.jquery.com/jQuery.noConflict)を使用してください。 –

答えて

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($)に変更し、競合を解決する必要があります。

+0

あまりにもそれが紛争を解決してくれてありがとう... – Infotechie

+0

それを行う方法?? – Infotechie

+0

@Infotechie See - > http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Engineer

0

は、また、あなたは、コード内のエラーを持って終了

(function($) { 
    ... 
}(jQuery)); 
+0

jQuery.noConflict()を使用してもコンフリクトが解決されない – Infotechie

0

に余分;を持っていますそれを定義するだけでなく、匿名関数を呼び出すための引数としてjQueryを使用します。したがって、匿名関数$jQueryです。これは異なるスコープを持つためです。

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

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

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

EDIT:

、これはどのような作品にはほとんど説明:

そうでない場合には(匿名関数でありますJavascriptでの匿名関数の動作については、this questionを参照してください)、jQueryで関数を呼び出します。コード内にjQuery.noConflict()を使用する場合は、$をjqueryにバインドするのを避けるために、$('#myId')の代わりにjQuery('#myId')のようなjquery関数を呼び出すことができます。$はまだPrototypeライブラリにバインドされていますそれはオブジェクトのためのprototypeチェーンからそれを区別するためにその方法です)。

は、今すぐあなたの匿名関数を考えてみます。

あなたは(function($){ /* Some stuff with $ as a variable */ })を持っています。関数内で新しいスコープがあるため、$は、関数に渡す変数であり、その外の$ではなく(Prototypeライブラリに依然としてバインドされています)。

これで、無名関数に何かを渡すので、それを実行します:(function($){ /* Some stuff with $ as a variable */ })(jQuery)。今度は$の機能は..... jQueryで、それ以外は$と同じではありません。

EDIT 2:

あなたの質問を更新してきたように、私は両方のライブラリを動作させるために手順を説明します。 jQueryの前にPrototypeのリファレンスを入れてから、jQuery.noConflict()に電話する必要があります。その呼び出しの後、$()はPrototypeライブラリーの関数をデフォルトにします。 jQueryライブラリの関数を呼び出すには、jQuery()the jQuery API referenceを参照)を使用する必要があります。 jQueryオブジェクトへの参照を匿名関数に渡すので、匿名関数$はjQueryオブジェクトを参照するため、Prototypeライブラリの機能を使用することはできません。

コールバック関数の問題について:contextMenu関数内に問題がある可能性があります。この関数は、競合の初期化を正しく使用できない可能性がありますが、これは単なる推測に過ぎません。 contextMenuの機能を実装してください。

+0

jqueryを初めて使用しているので、例を挙げて謝ることができます。 – Infotechie

+0

このような良い説明とリンクをありがとう。それは本当に私に無名関数の概念を学ぶのを助けました。しかし、私はまだあなたが "匿名関数を定義するだけでなく、それを呼び出すための引数としてjQueryを使用する必要があります。 "私も同じことをやっているからです。 – Infotechie

+0

私はthisのためにcontextMenu.jsを使用しています。あなたは間違いなくcontextMenu javascriptの競合解消の問題があります。以下は私がcontextMenuプラグインをダウンロードした場所からのリンクです。あなたはそこからそれを取ってもらえますか、それとも私がそれをかなり共有することができるか教えてください。 – Infotechie

関連する問題