2010-09-06 90 views
2

我刚在我的网站上实现了一个多语言的mod。Jquery/Javascript冲突?

问题是在语言模块的javascript文件和页面上已有的javascript文件之间似乎存在冲突。

<!-- language files here --> 
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script> 
<script type="text/javascript" src="js/translationEngine.js"></script> 
<script type="text/javascript" src="js/jquery.cookie.js"></script> 
<script type="text/javascript" src="js/jquery.translate-1.3.9.min.js"></script> 
<script>var browserlang = 'en';</script> 


<!-- Javascript --> 

<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> 
<script type="text/javascript" src="js/jquery.pngFix.pack.js"></script> 
<script type="text/javascript" src="js/jquery.flow.1.2.min.js"></script> 
<script type="text/javascript" src="js/jquery.prettyPhoto.js"></script> 
<script type="text/javascript" src="js/concept.js"></script> 

JS/jQuery的1.3.2.min.js是什么使得在主页上工作3图像滑块,但...这似乎与译者的功能也被干扰。

如果你从页面中删除js/jquery-1.3.2.min.js,翻译工作正常,但滑块不再有效。

从页面中删除js/jquery-1.4.2.min.js并没有使翻译工作,事实上,它似乎在后面造成更多的错误。

有人可以引导我在正确的方向,让我让语言翻译和图像滑块都工作?

http://filefx.com

谢谢:)

回答

4

简短的版本是消除此:

<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> 

和更新你的插件,也有可能的1.4.x版本在那里为他们每个人。通过第二次包括jQuery,就像你现在一样,它会消除插件并引发各种问题......第一步是删除第二个(希望是旧的)实例。

编辑:以下是jFlow的更新版本,名为jFlow plus,它适用于1.4.2。

+0

从1.3.2到1.4.2不应该有多少改变? – mpen 2010-09-06 01:06:36

+0

@Mark - 应该没有,但似乎jFlow插件有一些突破...但插件的网站在这个时刻离线,所以我不能提供一个链接到当前版本:http://插件.jquery.com/project/jFlow – 2010-09-06 01:08:33

+0

*不应该是* - >着名开发人员的遗言:P – alex 2010-09-06 01:09:28

4

退房jQuery的noConflict功能。这个函数告诉jQuery放弃它对$变量的控制权。这样,其他库可以使用它。

在线文档给出了一个很好的指导,以了解如何使用此功能。它救了我几次。从在线文档

例子:

<script type="text/javascript" src="other_lib.js"></script> 
<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript"> 
    $.noConflict(); 
    jQuery(document).ready(function($) { 
    // Code that uses jQuery's $ can follow here. 
    }); 
    // Code that uses other library's $ can follow here. 
</script> 

基本上,一旦你打电话noConflict,你仍然可以使用jQuery,只是用它使用jQuery变量名,而不是$

希望这会有所帮助!

+2

'.noConflict()'并不真的有助于在页面上有多个** jQuery **库的情况,这些并不能很好地发挥作用,它打算用于jQuery和*另一个*库。 – 2010-09-06 01:02:57

+1

我知道这是upvoted ...我不知道为什么,任何人后来发现这一点:*这不会解决问题*,'jQuery'变量正在重新定义与第二个包含jQuery库。这既是一个不必要的更重和更慢的页面,也不会正确地解决问题。 – 2010-09-06 01:23:04

+1

我同意@Nick。你不能用一个值定义一个变量,*用新值覆盖该变量,然后期望'noConflict()'(或其他任何方法)让你引用旧的被覆盖的值。 'noConflict()'方法解决了与'window。$'冲突,而不是'window.jQuery'的冲突。 – user113716 2010-09-06 01:41:27

0

我最终只是改变了加载库的顺序。

我让所有jquery库加载第一,从最新到最旧。然后我打电话给依赖jQuery的JavaScript文件。

现在工作正常。

+1

这不是一个好方法......对客户来说这是一个更重的页面。为什么*不*只是升级流量插件(我提供了一个更新的链接我的答案),忽略了jQuery 1.3.2并使您的页面更轻,更快为您的用户? – 2010-09-06 01:17:32

+0

雅,这将是一个好主意。大声笑现在可以使用你的方法。 – jiexi 2010-09-06 04:03:25

1

我一直在解决两个jquery版本之间的冲突,例如jQuery 1.3.2和jQuery 1.4.2在使用iframe的同一页上,但我最近发现,你可以单独使用版本jquery-1.5.1.js,并且一切正常。

1

我改变从下面的代码使用的页面上的所有.js文件:

<script> 
var K = jQuery.noConflict(); 
    alert(K); 
    jQuery(document).ready(function() { 

     alert("Bye"); 
    }); 
</script> 

现在工作得很好。