Magento中的jquery / prototype冲突

时间:2011-09-23 16:30:03

标签: jquery magento

这是一款基于Themeforest的Acumen主题的Magento商店。

看似突然出现,jquery的东西现在无法正常工作。 Acumen通过magento静态块加载jquery,并且没有触及任何一个。

昨天我正在努力添加jquery.clearfield.js插件,以便将这些功能添加到我们的表单中。我没有修改核心文件。我通过另一个静态块加载了clearfield插件,并将静态块添加到我们的联系CMS页面。

我当时登录并且正在自动填充名称/电子邮件的登录值,并且在某些时候我作为客户注销以在未登录时测试字段值。

由于jquery冲突我无法登录。我已经完成了代码,我似乎无法找到任何会导致这种情况发生变化的内容,而且我没有修改过任何核心或主题文件。

如果您在任何页面上查看source / inspect元素,您将看到prototype和jquery错误消息。

任何想法/见解都会有所帮助。

感谢。

3 个答案:

答案 0 :(得分:10)

如果要在local.xml中包含jquery且不包含冲突代码,请使用:

<default>
    <reference name="head">
        <block type="core/text" name="google.cdn.jquery">
            <action method="setText">
                <text><![CDATA[<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script><script type="text/javascript">jQuery.noConflict();</script>]]>
                </text>
            </action>
        </block>
    </reference>
</default>

干杯!!


修订版2:您可能希望编辑page.xml并在其中插入jquery.js和noConflict,因为page.xml是在local.xml之前加载的。或者,您可以使用local.xml删除所有以前的Prototype js调用,然后重新添加它们。我发现编辑page.xml更容易。

另外,我无法将Action setText用于“var jQuery = jQuery.noConflict();”,因此我自己创建了一个单独的js文件。不是很好,但它是在加载主jQuery js文件之后加载的(在Prototype之前)

答案 1 :(得分:4)

更新:不要再使用它了,请参阅上面@MagePsycho的答案。


这不是jQuery和Prototype冲突的问题,而是当你调用jQuery.noConflict()时jQuery实际上还没有加载。

在你的源代码中,“jQuery.noConflict()”调用是正确的,但jQuery本身通过google api在页面的最末端(页脚下方)加载。

我的建议是放弃google api,通过XML在本地加载jQuery

<action method="addItem"><type>skin_js</type><name>js/jquery-1.x.x.min.js</name></action>

并在jquery-1.x.x.min.js本身结束之前嵌入了一个jQuery.noConflict()调用。

答案 2 :(得分:1)

在一起运行jQuery和Prototype时,您需要运行“无冲突”模式。这将jQuery的钩子从“$”重新映射到“jQuery”,允许Prototype继续使用“$”。

如果插件我们使用“$”,它将使用Prototype的功能,并可能会崩溃。您可能需要手动编辑插件并将“$”替换为“jQuery”。