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

时间:2011-05-24 19:16:23

标签: 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>

...但是当我点击它时没有任何反应。看起来很直接,除了我看不到/哪里有拼写错误等等。所以,我检查Firebug,我看到以下错误:

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 个答案:

答案 0 :(得分: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"
  });
});

答案 1 :(得分:0)

似乎productAddToCartForm没有得到实例化

您可以尝试使用firebug从控制台创建VarienForm对象,以查看它是否返回了一个对象。

var tmpobj = new VarienForm('product_addtocart_form')

并查看在tmpobj中创建的内容

两个函数之后的.bind看起来也不行。你没有使用中级函数,而且函数没有返回任何东西。

更完整的示例将更容易修复。

我希望这会对你有所帮助。