将商品添加到购物车的JavaScript已损坏

jef*_*unt 5 javascript magento

我有一个按钮,它是我的Magento主题中提供的代码的一部分,根据日期/时间戳,我没有无意中编辑它.我确信它在某个时刻正在工作,但在上周回顾了我的源代码控制,我似乎无法追踪出错的地方.

这是HTML按钮:

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

...但是当我点击它时没有任何反应.看起来非常直接,除了我看不到是否/哪里有拼写错误等等.所以,我检查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>
Run Code Online (Sandbox Code Playgroud)

jef*_*unt 3

$变量与正在使用的其他 JavaScript 库冲突。删除 jQuery 库的包含应该会恢复其他功能,以证明这就是问题所在。

为了修复它,请重写 jPlayer 代码(替换$jQuery),或尝试使用该jQuery.noConflict()函数。

即,这个: $(document).ready(function(){...

...变成: jQuery(document).ready(function(){...

更多详细信息可以在jQuery.noConflict()文档中找到。

在我上面问题的这个特定示例中,我通过使用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"
  });
});
Run Code Online (Sandbox Code Playgroud)