2011-09-23 39 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