2

jqueryを使用するRedmineプラグインを作成しようとしています。

ビューに次の行を追加すると、競合が発生します。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script>

Uncaught TypeError: Cannot call method 'hasChildNodes' of undefined
prototype.js:5734
Uncaught TypeError: Object [object Object] has no method 'dispatchEvent'
prototype.js:828
Uncaught TypeError: Object [object Object] has no method 'attachEvent'

ビューはフックです。

を削除する<script src="">と機能しますが、使用するjQueryがありません。

4

1 に答える 1

7

見てみると、prototype ライブラリも読み込まれています。$通常、ライブラリは、自身を変数に割り当てることによって、自動的にグローバル スコープにロードされます。

$.noConflict();jQuery を機能させるには、jQueryをロードした後に追加するだけ です (jQuery API のnoConflictを参照)。これにより、jQuery がアンロード$され、以前のもの (プロトタイプ) に再割り当てされます。

次に、ショートカットjQueryではなくオブジェクトを使用して jQuery にアクセスします。$

  jQuery(document).ready(function($) {
    // Code that uses jQuery's $ can follow here.
  });

本当にショートカット変数 (たとえば、$j) を使用したい場合は、noConflict を実行するときにそれを割り当てることができます。

var $j = $.noConflict(); // Then use $j instead of $

または、無名関数を作成し、その中で jQuery を割り当てることもできます$。これは関数のスコープ内でのみ行われます (したがって、プロトタイプは $ スコープ外のままです):

(function($) { 
  $(function() {
    // more code using $ as alias to jQuery
  });
})(jQuery);

これらのすべて (およびその他のいくつかの例) は、noConflictページに示されています。

于 2011-08-03T11:59:36.113 に答える