2011-06-04 83 views
3

因此,我正在开发一个平台,每次加载页面时都会注入jQuery-1.2.6。我开发了我的页面来使用jQuery-1.4.2,所以当我的页面加载时,我的页面上有2个jQuery实例。jQuery noConflict()问题

为了避免发生冲突,我已经包括在我的JS文件下面一行是超出了我的页面:

var mc$ = jQuery.noConflict(); 
jQuery(function($) 

一切似乎如果我用了其中$原本是用来MC $奏效。

我在Firebug和IE中遇到了一个错误,我不知道该如何解决。

在一个文件时,我的网页加载开发商是在平台上注入做:

$(document).ready(function() { 

,并在Firebug的错误规定:“$不是一个函数”。

此错误才开始显示出来,一旦我做出的改变:

var mc$ = jQuery.noConflict(); 

我想,通过创建MC $变量的东西与开发者的$(document)...呼叫爆发。如果是这样,我不知道如何解决这个问题,如果没有,我希望有一个解决方案,我可以将该功能提供回开发者的注入文件。

谢谢!

+0

'.noConflict()'是兼容*其他* JavaScript库/在同一页面中,不支持任何方式支持jQuery(在1.6+中为sans'.sub()')的多个实例。 – 2011-06-04 23:55:14

+3

@Nick Craver noConflict()'[文档](http://api.jquery.com/jQuery.noConflict/)不同意你的看法。它特别提到了通过'true'作为参数来解除冲突的'jQuery'符号。 – lawnsea 2011-06-05 00:17:13

+0

@lawnsea - 这是特别的(并限于)1.6+(我上面提到的例外)。请注意,即使这样,你仍然会遇到许多*问题,例如,插件是在jQuery对象上定义的,就像许多事件处理程序一样(取决于jQuery或它们的插件)。这来自于解决这些问题的经验......请记住,如果没有插件等,那么没有理由将旧版本保留在首位。 – 2011-06-05 04:39:14

回答

2

<head>部分呼叫顺序必须是下一个:

  1. jQuery library№1;
  2. no conflict for it;
  3. jQuery库№2。

.noConflict()可以是这样的:

<script type="text/javascript">var mc$ = jQuery.noConflict();</script> 

使用后此语法的脚本:

mc$('#container').height(); 
4

根本原因是将两个jQuery实例加载到一个页面中。通过它的声音,jQuery的原始实例(1.2.6)也从全局$变量中解除绑定。

从查看http://api.jquery.com/jQuery.noConflict/,你可以尝试向jQuery.noConflict()调用提供一个额外的参数来表示卸载jQuery,因为1.4.2的实例似乎在1.2.6之前加载。

除此之外,没有测试,准确的情况下,我不知道该提供什么其他的帮助:)

+0

有趣。显然我做得不对,因为通过设置'jQuery.noConflict(true);'我的一些插件中断了。感谢大家迄今为止的投入。 – Mark 2011-06-05 04:18:06

+0

@Mark不幸的是,这是可以预料的。大多数(如果不是全部的话)jQuery插件依赖于“jQuery”关键字来初始化,所以使用'var mc $ = jQuery.noConflict(true)'会导致它们中断。使用你的上述场景,你可能需要通过你的插件,用'})(mc $);'替换最后一行的'})(jQuery);'变量。 – Jake 2011-08-10 19:59:51