【问题标题】:jquery/prototype conflicts in MagentoMagento 中的 jquery/prototype 冲突
【发布时间】:2011-09-23 16:30:03
【问题描述】:

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

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

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

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

由于 jquery 冲突,我无法登录。我已经浏览了代码,我似乎找不到任何会导致这种情况的更改,并且我没有修改任何核心或主题文件。

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

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

谢谢。

【问题讨论】:

  • 已编辑以删除旧的开发站点 URL(另外,我不再在那里工作,所以仍然在这里有点俗气)

标签: jquery magento


【解决方案1】:

如果您想在 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 之前)加载的

【讨论】:

    【解决方案2】:

    更新:不要再用这个了,参考上面@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() 调用。

    【讨论】:

    • 好的,这对一些人有所帮助。我忘记了这个主题使用 jquery 加载和 jquery 运行脚本,两者都设置为静态块。我已经将这两个脚本都放在了我们主题的 page.xml 中,事情似乎有点工作。产品页面 JS 工作正常,但登录页面按钮仍然不工作。我怀疑为什么。
    【解决方案3】:

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

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

    【讨论】:

    • noConflict 已被调用。奇怪的是,我什么都没碰过,它刚刚开始出现在不知道正在使用 clearfield 插件的页面上。我什至已经返回并撤消了我所做的更改,但错误仍然存​​在。例如,请参阅页面 dev.thehipster.com.au/wink-nyc/april-blouse 。它显示 jquery 未定义。
    • 我认为您没有正确设置 noconflict。 jQuery 仍在使用 $ 代码。该 URL 上的 Vire 源,您会在页面底部看到它: $(document).ready(function() { $('.button_sizechart, #close-size-chart').click(function(e) {
    • 我觉得这更好地解释了 jQuery/$ 和实际发生的问题,所以我给了你一个 up
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多