2015-11-25 30 views
0

我遇到了Magento錯誤,我試過將它修復幾個小時,但不知何故,我無法弄清楚它。Magento錯誤TypeError:升級後的prototype.js中的元素爲空

我的客戶商店在Magento 1.4.1.1上運行,他希望我將其升級到最新的1.9.2.2(Community Edition)。所有的工作都很好,模板看起來應該是這樣,但結帳過程不起作用,我真的不知道爲什麼。

每次我把東西放進購物車去結賬時,它會將我帶到我可以選擇註冊或登錄的頁面或繼續作爲訪客。我選擇繼續作爲客人,點擊「下一步」,但絕對沒有任何反應。

Firefox的控制檯顯示我下面的錯誤:

TypeError: element is null in prototype.js:1931 

我已檢查.js文件,可以看到此時它使用一個空的元素,它是這樣的:

hide: function(element) { 
element = $(element); 
    element.style.display = 'none'; 
return element; 

所以基本上它試圖隱藏一個對象,它是null。麻煩是:我不知道哪個文件或導致錯誤,以及如何調試它。我閱讀過多篇文章,而且我只能找到一篇帖子,其中說某處的頭部可能沒有關閉標籤。但是隻有很多文件,我不知道在哪裏尋找。

如果有人有類似的問題或知道問題的可能,請分享,以幫助我解決這個問題。

感謝您的幫助!

編輯:

我用螢火蟲,是能夠看到創建錯誤。 似乎我的opcheckout.js有問題。但是這是一個沒有任何改變的magento文件,位於skin/base /文件夾中。

我能想到的唯一的事情就是他們將1.4.1.1中的某些內容更改爲1.9.2.2,但我沒有看到它。

下面是來自opcheckout.js的代碼:由 「Element.hide( '寄存器客戶密碼');」 創建

setMethod: function(){ 
    if ($('login:guest') && $('login:guest').checked) { 
     this.method = 'guest'; 
     var request = new Ajax.Request(
      this.saveMethodUrl, 
      {method: 'post', onFailure: this.ajaxFailure.bind(this), parameters: {method:'guest'}} 
     ); 
     Element.hide('register-customer-password'); 
     this.gotoSection('billing', true); 
    } 

該錯誤。

下面是從我的主題的billing.phtml代碼在DIV所在位置:

<li class="fields" id="register-customer-password"> 
       <div class="field"> 
        <label for="billing:customer_password" class="required"><em>*</em><?php echo $this->__('Password') ?></label> 
        <div class="input-box"> 
         <input type="password" name="billing[customer_password]" id="billing:customer_password" title="<?php echo $this->__('Password') ?>" class="input-text required-entry validate-password" /> 
        </div> 
       </div> 
       <div class="field"> 
        <label for="billing:confirm_password" class="required"><em>*</em><?php echo $this->__('Confirm Password') ?></label> 
        <div class="input-box"> 
         <input type="password" name="billing[confirm_password]" title="<?php echo $this->__('Confirm Password') ?>" id="billing:confirm_password" class="input-text required-entry validate-cpassword" /> 
        </div> 
       </div> 
      </li> 

所以在我眼裏它試圖隱藏元素是存在的,我不知道爲什麼它說元素爲null。 ...

任何想法?

+0

使用瀏覽器控制檯是否可以展開堆棧跟蹤?這會告訴你最初調用hide()的位置。你得到的錯誤是因爲元素不存在,你不能在不存在的元素上調用'hide()' –

+0

感謝您的回答......我認爲是這樣,但不幸的是我沒有得到堆棧跟蹤:( –

+0

@ GeekNum88我已經更新了我的原始問題,因爲我可能找到了原因......但我無法弄清楚它爲什麼這樣做......你有什麼想法嗎? –

回答

0

只是用於測試的元素的存在,第一,這將防止「不確定」或「空」的錯誤被拋出:

if($(element)){ 
    element = $(element); 
    element.style.display = 'none'; 
    return element; 
} 

$(元素)是的document.getElementById相當於(「」 +元素+'')