2012-02-23 28 views
1

我在单个页面上有2个js。在JS的一个我做的var jQuery = $.noConflict(true);,之后使用使用jQuery对象,就像jQuery("#div").hide();为JQuery变量定义一个范围,不同的js - 单个页面

在另一个JS所有的jQuery的方法,我现在用的是传统的$变量&访问jQuery方法为$("#div").hide();

当在一个页面上我使用了两个js',事情工作正常。但是,当我包含这两个时,第二个js中的$似乎被jQuery覆盖。例如,在JS 2我不能再做$("#div").hide(),但如果我使用jQuery而不是$,它工作正常 - jQuery("#div").hide();

为什么我会尝试这是因为第一个div将作为插件分发到不同的网站,第二个js可能是该网站开发人员编写的Jquery。

请帮我弄清楚我哪里出错了。

谢谢。

回答

0

解决这个问题的最简单方法是使用插件作者使用的模式。

(function($) { 

    // Use $ safely within the function 

})(jQuery); // Passes in jQuery object 

这是函数立即创建和调用,同时允许您将一个变量传递给函数的作用域。使用这个,你可以在你的代码中继续引用$,而不用担心覆盖它或冲突。

jQuery documentation建议这种模式

+0

好的。我创建了一个这样的功能,首先被调用。现在,我在这个js中有多个函数,我是否应该像这样包装每个函数,或者我该如何处理它? – Jayesh 2012-02-23 14:08:37

+0

只需创建一个函数,并将其作为该特定页面/应用程序的所有jQuery代码的范围。它只是作为一个包装器,你可以根据需要添加尽可能多的函数和变量。 – 2012-02-23 14:17:28

1

您使用的是noConflict,它释放了jQuery在$上的保留。如果它在单独的脚本中,无关紧要,因为它是相同的全球环境。

在您要使用$的脚本中,在您的.ready()处理程序中定义该变量。

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

文件没有范围,你noConflict解除引用$为您的整个页面。任何东西

+0

将它的工作,如果我的插件我VAR myJqueryVar = jQuery和然后我使用这个变量访问jQuery方法?我不是推理$? – Jayesh 2012-02-23 14:23:53