我正在尝试制作一个使用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可以使用。
答案 0 :(得分:7)
看着它,原型库也被加载了。通常,库会通过将自己分配到$
变量来自动加载到全局范围中。
要使jQuery正常工作,只需在加载jQuery后添加$.noConflict();
(请参阅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页面上 - 所以您可能希望在那里查看。