2011-09-23 41 views
3

这是一个基于Themeforest的Acumen主题的Magento商店。Magento中的jquery/prototype冲突

貌似出乎意料,jquery的东西现在不起作用。 Acumen的jquery通过一个magento静态块加载,并没有被触及。

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

我当时登录并在名称/电子邮件自动填充值渐渐的记录,并在某些时候我登出作为客户测试的字段值未登入时。

我由于jQuery冲突而无法登录。我已经通过代码,我似乎无法找到任何改变,这将导致这一点,我没有修改任何核心或主题文件。

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

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

谢谢。

+0

编辑删除旧dev网站的URL(加上,我不再在那里工作,所以有点俗气,这里仍然) – pspahn

回答

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文件加载后(和原型之前)

+0

YOU ROCK!伟大的工作! – kbariotis

1

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

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

+0

noConflict已被调用。奇怪的是,我没有碰到任何这个,它刚刚开始出现,并且在不知道使用clearfield插件的页面上。我甚至回去了,取消了我所做的更改,但错误仍在显示。例如,请参阅http://dev.thehipster.com.au/wink-nyc/april-blouse页面。它显示jquery没有定义。 – pspahn

+0

我认为你没有正确设置noconflict。还有jQuery使用的$ code。这个URL上的Vire源代码会在页面底部看到它:$(document).ready(function(){(。button_sizechart,#close-size-chart')。click(函数(e){0} { –

+0

我觉得这个解释了jQuery/$更好,以及实际发生的问题,所以我给了你一个 –

4

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


这不是jQuery和原型的冲突的问题,而是jQuery的,当你调用jQuery.noConflict居然没有装,但()。

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

我的建议是放弃谷歌的API,通过

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

通过本地XML加载jQuery和右jQuery的1.xxmin.js本身结束前嵌入jQuery.noConflict()调用。

+0

好吧,这有助于一些我忘记了这个主题是使用jQuery负载以及一个jquery运行脚本,都设置为静态块,我已经将这两个脚本放在我们主题的page.xml中,并且事情似乎有点工作。产品页面JS工作正常,但登录页面按钮仍然不是我有我的怀疑,为什么。 – pspahn