2011-05-24 96 views
4

我有一個按鈕,這是我的Magento主題提供的代碼的一部分,並根據日期/時間戳,我沒有不經意地編輯它。我確信它在某些時候起作用,但在上週回顧我的源代碼控制,我似乎無法追查哪裏出了問題。JavaScript將添加項目到購物車壞了

這裏是按鈕HTML:

<button type="button" title="Add to Cart" class="button btn-cart" onclick="productAddToCartForm.submit(this)"><span><span>Add to Cart</span></span></button> 

...但是當我點擊它沒有任何反應。似乎相當直截了當,但我看不到,如果/那裏有一個錯字,等等。所以,我檢查螢火蟲,我看到了以下錯誤:

enter image description here

然而,當我進入「查看頁面源代碼」,劇本確實是在頁面:

<script type="text/javascript"> 
//<![CDATA[ 
    var productAddToCartForm = new VarienForm('product_addtocart_form'); 
    productAddToCartForm.submit = function(button, url) { 
     if (this.validator.validate()) { 
      var form = this.form; 
      var oldUrl = form.action; 

      if (url) { 
       form.action = url; 
      } 
      var e = null; 
      try { 
       this.form.submit(); 
      } catch (e) { 
      } 
      this.form.action = oldUrl; 
      if (e) { 
       throw e; 
      } 

      if (button && button != 'undefined') { 
       button.disabled = true; 
      } 
     } 
    }.bind(productAddToCartForm); 

    productAddToCartForm.submitLight = function(button, url){ 
     if(this.validator) { 
      var nv = Validation.methods; 
      delete Validation.methods['required-entry']; 
      delete Validation.methods['validate-one-required']; 
      delete Validation.methods['validate-one-required-by-name']; 
      if (this.validator.validate()) { 
       if (url) { 
        this.form.action = url; 
       } 
       this.form.submit(); 
      } 
      Object.extend(Validation.methods, nv); 
     } 
    }.bind(productAddToCartForm); 
//]]> 
</script> 
+2

請問你的Magento主題使用多個JavaScript庫(例如jQuery和prototype.js中):

在這個特殊的例子在上面我的問題,我通過下列方式使用noConflict()解決它?我建議刪除鏈接到jQuery和任何其他插件/腳本,檢查問題是否仍然存在,然後使用jQuery的[noConflict()方法](http://api.jquery.com/jQuery.noConflict/)來避免與prototype.js衝突,如果一切順利的話,再次包含這些腳本。 – Nick 2011-05-24 19:40:48

+1

您的腳本在部分> – Jeff 2011-05-24 19:43:22

+0

它不在頭部。它在頁面的中間。 – jefflunt 2011-05-24 20:04:01

回答

3

$變量與正在使用的其他JavaScript庫存在衝突。除去包含jQuery庫應該帶回其他功能,以證明這是問題。

爲了修復它,要麼重寫jPlayer代碼(用jQuery代替$),要麼嘗試使用jQuery.noConflict()函數。

即,這樣的: $(document).ready(function(){ ...

...變爲: jQuery(document).ready(function(){ ...

更多細節可以在jQuery.noConflict()文檔中找到。

$.noConflict(); 
jQuery(document).ready(function(){ 
    jQuery("#jquery_jplayer").jPlayer({ 
    ready: function() {  
     jQuery(this).jPlayer("setMedia", { 
     mp3: jQuery('#jquery_jplayer').attr('media_file') 
     }); 
    }, 
    swfPath: "/js/jplayer", 
    supplied: "mp3" 
    }); 
}); 
0

它好像productAddToCartForm是沒有得到實例化

您可以嘗試使用Firebug創建從控制檯VarienForm對象,以確定其返回一個對象。

VAR tmpobj =新VarienForm( 'product_addtocart_form')

,看看哪些內容在tmpobj

而且還.bind創建兩個功能後,似乎並不確定。你沒有使用inmediate函數,並且函數不返回任何東西。

更完整的例子會更容易解決。

我希望這可以幫助你。

+0

我很確定這就是腳本的第一行。在這種情況下,這似乎不是問題。 – jefflunt 2011-05-24 20:11:27

+0

可以嘗試在提交獲得分配後停止執行,然後檢查productAddToCartForm對象,看看是否有一個方法調用submit來接受一個參數?,因爲這就是onclick試圖調用的方法 – 2011-05-24 20:15:57

+0

Nick的評論在原來的問題是這個問題。 JQuery和購物車組件之間存在衝突。當我刪除JQuery進行測試時,購物車會恢復生機。 – jefflunt 2011-05-24 20:21:36

相關問題