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

看着它,原型库也被加载了。$通常,库会通过将自己分配给变量来自动加载到全局范围中。

要让 jQuery 工作,只需 $.noConflict();在加载 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 回答