2012-02-23 15 views
1

1つのページに2つのjがあります。 JSの一つで、私はvar jQuery = $.noConflict(true);をやっているし、別のjsでjQuery("#div").hide();JQuery変数のスコープを定義する、異なるjs - 単一のページ

のように、jQueryオブジェクトを使用して、すべてのjQueryのメソッドを使用して、その後、私は$("#div").hide();

としてjQueryのメソッドにアクセスする従来の$変数&を使用しています私は2つのjsのどちらかを使用するページで、問題なく動作します。しかし、両方を含めると、2番目のjsの$はjQueryによって上書きされているようです。たとえば、js 2では私はもはや$("#div").hide()を実行できませんが、$の代わりにjQueryを使用すると、うまく動作します - jQuery("#div").hide();

これは、最初のdivがプラグインとして別のWebサイトに配布され、2番目のjsがそのWebサイト開発者が作成したJqueryであるためです。

おかげで...私が間違ってどこに行くのです見つけ出す助けてください。

答えて

0

これを解決する最も簡単な方法は、プラグイン作成者が採用するパターンを使用することです。

この機能は、すぐに作成されて呼び出され、同時に変数を関数のスコープに渡すことができます。これを使用すると、コード内の$を参照して上書きしたり、競合することを心配する必要がなくなります。私のプラグインで、私はVAR myJqueryVar = jQueryの操作を行うと、私はjQueryのメソッドにアクセスするには、この変数を使用する場合

jQuery documentationは、このパターン

+0

私は最初に呼び出されたこのような1つの関数を作成します。さて、私はそのjsで複数の関数を持っています、私はこれのような各関数をラップするか、それをどのように扱いますか? – Jayesh

+0

1つの関数を作成し、その特定のページ/アプリケーション用のすべてのjQueryコードのスコープとして扱います。これは単にラッパーとして機能し、必要な数の関数と変数を望みどおりに追加できます。 –

1

noConflictを使用しています.jQueryの保留は$です。それは同じ地球環境なので、それが別々のスクリプトにあるかどうかは関係ありません。

$を使用するスクリプトでは、.ready()ハンドラ内でその変数を定義します。

jQuery(function($) { 
    $('foo').bar(); 
}); 
0

ファイルのスコープを持っていない、あなたはページ全体のためにnoConflict$を間接参照しました。何でも

+0

はそれがうまくいくアドバイス?私は$を参照していませんか? – Jayesh

関連する問題