2011-08-10 18 views
1

我正在为客户端重新构建一个页面,并且我在页面上实现了jQuery代码时遇到了一些问题。
有一个使用Prototype的弹出式灯箱,它在页面加载时出现,然后在顶部和右侧放置了选取框/滚动条,我使用了jQuery。我真的不确定导致错误的原因。
我对jQuery的noConflict很熟悉,但我已经在本页面上尝试了几乎所有的变体,并且仍然出现错误 - 几秒钟后,停止了marquees - 并且IE显示“页面错误”对话框,参考线464(“阵列长度必须分配一个有限的正数”)。
这里是页:-link由作者 -
去除。这里是的prototype.js:-LINK由作者 -


删除我完全不知道是什么原因造成这个错误,JavaScript是不是我的最强侧。jQuery和原型 - 碰撞导致破坏功能

+0

你可能可以搞定它,但我敢打赌,只需在jquery中找到一个弹出式灯箱或原型中的一个选取框并仅使用其中一个库,就会更容易。他们对于共同合作可能会非常不利。那就是说,你的问题可能与你调用的范围,以及你包含你的库和插件的顺序有关。 – Ken

+0

我可能会这样做,但如果我可以解决这个问题,那么我宁愿继续使用jQuery,因为我对它更熟悉。 另外,包括库和插件的顺序应该是什么?并请原谅我的无知,但我的呼叫的范围是什么? –

回答

2

当我第一次看到这个错误时,我一直在寻找更通用的“Prototype + jQuery”错误,当时我应该一直在寻找特定于我正在处理的确切问题的解决方案。
添加术语“数组长度”和“行464”,其实导致我解决这个特定的问题,那就是:

  1. 从原型V1.4更新至v1.5.1.2( v1.7,最新版本, 没有正常工作,甚至产生了堆栈溢出错误)。
  2. 变卦了脚本的秩序,改变noConflict:

    <script src="/scripts/jquery-1.5.2.js" type="text/javascript"></script> 
    <script src="/scripts/jquery.Scroller-1.0.src_4.js" type="text/javascript"></script><!-- all _$_'s replaced with _jQuery_ --> 
    <script type="text/javascript"> 
    <!-- 
    // more jquery, all $'s replaced with jQuery 
    --> 
    </script> 
    <script type="text/javascript"> 
    <!-- 
    jQuery.noConflict(); 
    --> 
    </script>  
    <script src="scripts/prototype-1.5.1.2.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
    <!-- 
    // everything else, including prototype scripts 
    --> 
    </script> 
    

就是这样!现在我没有收到“Line 464”错误,所有脚本都正常工作。 谢谢@Ken和@Diodeus为我带来解决方案。

+0

谢谢里克,你今天救了我的命。 –

0

我会在同一个库中找到插件。 jQuery有你提到的所有插件,所以没有必要尝试使用两者。这两个图书馆很难一起工作。

如果你使用这两个库设置,试试这个排序:
1)其他的lib
2)jQuery的
3)noconflict调用
4)所有的插件

<script src="scripts/prototype.js" type="text/javascript"></script> 
<script src="/scripts/jquery-1.5.2.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
<!-- 
    $.noConflict(); 
--> 
</script> 
<script src="/scripts/jquery.Scroller-1.0.src_3.js" type="text/javascript"></script> 
<script src="scripts/lightbox.js" type="text/javascript"></script> 
+0

我试着按照这个顺序放置脚本,并且用'jQuery'替换了'$',就像@Diodeus说的那样...仍然会出现同样的错误。 我会使用全部jQuery,但在开始更改事物之前,网站上正在使用脚本,并且我宁愿保留这些脚本。 –

2

您可能需要通过插件并将$(替换为jQuery(,因为您需要在无冲突模式下使用“jQuery ...”而不是“$ ...”。

+0

所以基本上我使用的任何jQuery代码 - 我应该用'jQuery'代替'$'? –

+0

是的。在插件中这样做,因为它们可能不是在考虑“无冲突”的情况下制作的。 –

+0

有没有一种方法可以找到导致错误的确切脚本/行?在prototype.js中提到的Line 464 IE并没有告诉我很多 - 只有(或许)它与'.extend'有关,但是这并没有说明什么。 如果我能找到问题的根源,它会使修复更容易。 –

2

环绕使用jQuery的与

(function ($) { 
... // Your code 
})(jQuery) 

这样,它使用本地$这势必jQuery和和jQuery唯一的代码。

在同一个网站上使用这两个框架也被认为是一个坏主意。几乎所有的Prototype插件都可以找到jQuery替代品。