【问题标题】:Jquery + Prototype conflictJquery + 原型冲突
【发布时间】:2011-01-29 06:15:01
【问题描述】:

我最近继承了一个以各种方式拙劣的网站。我更像是一个 php 人,最初 js 工作得很好。我没有对 javascript 或任何包含文件进行任何更改,但在进行了一些内容编辑后,我收到了来自 firebug 的错误。

a.dispatchEvent is not a function
emptyFunction()protot...ects.js (line 2)
emptyFunction()protot...ects.js (line 2)
fireContentLoadedEvent()protot...ects.js (line 2)

[Break on this error] var Prototype={Version:'1.6.0.2',Brows...pe,Enumerable);Element.addMethods();
protot...ects.js (line 2)
this.m_eTarget.setStyle is not a function

[Break on this error] this.m_eTarget.setStyle( { position: 'relative', overflow:'hidden'} );
protot...ects.js (line 43)
uncaught exception: [Exception... "Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE)" nsresult: "0x80070057 (NS_ERROR_ILLEGAL_VALUE)" location: "JS frame :: js/prototype_effects.js :: anonymous :: line 2" data: no]

谷歌搜索我发现一些帖子有时 jquery+prototype 不能很好地播放,重新排列脚本可以解决这个问题,但是由于我没有触及这些部分,我不确定我什至需要从哪里开始调试。之前的开发人员合并了一个 head.inc 文件,该文件加载原型,scriptaculous,然后许多页面在一个子模板中加载 jquery 用于灯箱等功能。

该站点的临时地址为http://dawn.mikeyhill.com

感谢任何帮助。

【问题讨论】:

    标签: javascript jquery prototypejs conflict


    【解决方案1】:

    原型库是侵入性的:它将各种方法添加到 Javascript 的核心对象中。然后通过for(var k in o) 迭代对象时,迭代将包括这些新方法(因为 Javascript 尚不支持不可迭代的属性)。这就是为什么在 Prototype 中迭代总是通过诸如 each() 等不受此问题影响的工具来执行。

    问题在于其他代码仍在使用旧的“for-var-in”循环。此代码将中断。在 Prototype 不能与其他库一起使用的情况下,99% 的问题是由于迭代造成的。

    你是说你没有接触过代码,我相信你,所以这留下了三个选择:

    • 问题之前就存在,但您没有注意到它
    • 有问题的代码仅在特殊情况下执行(由于某些特殊输入)。以前的程序员从未尝试过这种输入。
    • 您属于 1% 的问题是由其他因素引起的 :)

    【讨论】:

      猜你喜欢
      • 2011-03-08
      • 2010-11-01
      • 2012-01-09
      • 2010-09-13
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      相关资源
      最近更新 更多