2011-05-24 5 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

しかし、私はビュー」に行くとき:タイプミスがある場合/場合、私は見ることができない以外だから、私はFirebugのをチェックして、私は次のエラーが表示さなど、かなりまっすぐ進むようですページのソース」は、スクリプトがページに実際にある:

<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のを)使用していますか? jQueryとその他のプラグイン/スクリプトへのリンクを削除し、問題がまだ発生していないかどうかを確認し、jQueryの[noConflict()メソッド](http://api.jquery.com/jQuery.noConflict/)を使用して回避することをお勧めしますprototype.jsと競合し、その時点ですべてがうまくいけば、それらのスクリプトを再び含めます。 – Nick

+1

スクリプトはセクションにあります> – Jeff

+0

これは頭の部分にありません。それはページの真中にあります。 – jefflunt

答えて

3

$変数は、使用されている他のJavaScriptライブラリと競合しています。それが問題であることを証明するために、jQueryライブラリのインクルードを削除すると、他の機能が返されます。

これを修正するには、jPlayerコード($の代わりにjQuery)を書き換えるか、jQuery.noConflict()関数を使用してみてください。

すなわち、この: jQuery(document).ready(function(){ ...

詳細はjQuery.noConflict()ドキュメントに記載されています: $(document).ready(function(){ ...

は...ということになります。上記の私の質問では、この特定の例では

、私は次のように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が

をインスタンス化取得されていないようにあなたは、そのかどうかを確認するために、コンソールからVarienFormオブジェクトを作成するために放火犯を使用するように試みることができるようですオブジェクトを返す。

するvar tmpobj =新しいVarienForm( 'product_addtocart_form')

なくOKらしいん両方の機能後もtmpobj

そして.bindに作成される何かを参照してください。あなたは、inmediate関数を使用していないし、関数が何も返さないことに加えて。

もっと完全な例は簡単に修正できます。

私はこれがあなたを助けてくれることを願っています。

+0

私はそれがスクリプトの最初の行がやっていることだと確信しています。この場合、それは問題ではないようです。 – jefflunt

+0

submitが割り当てられた後でブレークポイントで実行を停止しようとすると、productAddToCartFormオブジェクトを調べて、1つの引数を取るsubmitと呼ばれるメソッドがあるかどうかを調べることができます。これはonclickが呼び出しようとしているためです。 –

+0

Nickの元の質問が問題です。 JQueryとカートコンポーネントとの間に矛盾があります。テストのためにJQueryを削除すると、カートが元気に戻ってきます。 – jefflunt

関連する問題